【问题标题】:Timeout on CreateRequestClient on volume test after MassTransit upgradeMassTransit 升级后批量测试的 CreateRequestClient 超时
【发布时间】:2022-01-13 06:47:12
【问题描述】:

刚刚从 MassTransit 6.3.2 升级到 7.2.4。我正在使用 .Net Core 5。

以下单元测试在升级前运行良好,但升级后失败。

using var harness = new InMemoryTestHarness();
       
harness.Consumer(() => new MockedxxxService(), xxxEndPoint);

harness.Start().Wait();

IBus endpoint = harness.Bus;

var tasks = new System.Collections.Concurrent.ConcurrentBag<Task<string>>();
var result = Parallel.For(0, 100, index =>
{
    var sut = new xxxRetriever(..., endpoint, ...);
    tasks.Add(sut.Getxxx(paramx));
});

Assert.True(result.IsCompleted);

await Task.WhenAll(tasks);

xxxRetriever 类中的代码如下所示。

public async Task<string> Getxxx(string paramx)
{

   try
   {
      var serviceAddress = new Uri("queue:" + ...);

      var xxxService = _busService.CreateRequestClient<xxxContract>(serviceAddress, TimeSpan.FromMilliseconds(xxx));
       var xxxResponse = await xxxService.GetResponse<xxxResultContract>(new
       {
           ...
       }).ConfigureAwait(false);

     ....
   }
}

端点作为 IBus 注入到类中。

模拟的服务如下所示。

public class MockedxxxService : IConsumer<xxxContract>
{

    public async Task Consume(ConsumeContext<xxxContract> context)
    {
        await context.RespondAsync<xxxResultContract>(new { ... } } });
    }
}

当我们将任务数量限制在 30 个左右时,测试运行良好。但在此之上,它始终失败并显示消息“超时等待响应,RequestId:...”。

任何帮助将不胜感激。

【问题讨论】:

    标签: timeout masstransit


    【解决方案1】:

    经过大量调查,我们发现这是由 .Net 5 处理线程创建的方式引起的。见ThreadPool.SetMinThreads does not create any new threads

    我们在测试前启动了线程池并解决了这个问题。不知道为什么这在 MassTransit 6 下的 .Net 5 中可以正常工作,但现在可以正常工作了。

    【讨论】:

      【解决方案2】:

      这可能与 TPL 中的争用有关,但这只是猜测。您也许可以配置增加总线上的并发限制,看看是否有帮助:

      harness.OnConfigureInMemoryBus += c =>
      {
          c.Host(h => h.TransportConcurrencyLimit = 100);
      };
      

      这是一个猜测,但它可能是相关的,因为它是特定于负载的。

      显然,这应该在调用Start 之前调用硬度(应该是awaited,而不是顺便使用.Wait())。

      【讨论】:

      • 感谢您的回复和建议。然而,这并没有奏效。
      • 如果您创建了一个独立的 GitHub 存储库来重现问题,您可以提交问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 2019-08-18
      相关资源
      最近更新 更多