【问题标题】:Publishing messages on Azure Service Bus using MassTransit is intermittently slow使用 MassTransit 在 Azure 服务总线上发布消息时断时续
【发布时间】:2021-06-03 12:06:13
【问题描述】:

这本身可能不是 MassTransit 问题,但我正在尝试调试正在发生的事情。

我们将 MassTransit (7.1.8) 与 Azure 服务总线一起使用。我们的大多数消息都能及时发布,但有时消息需要很长时间才能发布。我不明白为什么。

我们的 4 个(高级)ASB 实例负载不足,但 CPU/内存不高于 ~70%,我想这不应该令人担忧。

这是我们日志中的一个 sn-p:

03 Jun 2021 13:41:55.642 IBusControl.PublishEvents() with 1 took 00:00:36.1610001
03 Jun 2021 13:41:55.642 SEND sb://<namespace>.servicebus.windows.net/events/...
03 Jun 2021 13:41:19.481 IBusControl.PublishEvents() called with 1 items.

以及对应的代码:

logger.LogDebug("IBusControl.PublishEvents() called with {count} items.", count);
var stopWatch = Stopwatch.StartNew();
var tasks = updatedItems.Select(x => bus.Publish<ISomeEvent>(new SomeEvent(x, x.Parameters)));
await Task.WhenAll(tasks);
stopWatch.Stop();
logger.LogDebug("IBusControl.PublishEvents() with {count} took {elapsed}", count, stopWatch.Elapsed.ToString());

所以我想弄清楚为什么在我们调用 Publish 和 MassTransit 记录 SEND 条目之间需要超过 30 秒。

不确定去哪里看?任何帮助将不胜感激。

编辑

我注意到的一件有趣的事情是,无论要发布多少条消息,它所花费的时间通常约为 10 秒????

【问题讨论】:

  • 您是否在发布消息之前启动总线?您是在同一个数据中心,还是从澳大利亚(或月球)向美国西部发布?我知道关于 P4 命名空间的一个事实,当我在同一个数据中心时,我可以 publish 6,000 messages/second,但离它更远时速度会慢得多:
  • @ChrisPatterson 发布消息的 ASB 和 AppService 都在同一个区域(北欧)
  • @ChrisPatterson 这是一个 ASP.NET Core 3.1 项目,我们在 ConfigureServices 中调用 services.AddMassTransitHostedService(true);
  • 然后我会删除命名空间并重新创建它,因为你显然有一个坏主机。
  • 原来是 Azure 服务总线,我知道。 SDK 不会向调用应用程序显示这些重试,这就是它没有被记录的原因。

标签: azureservicebus masstransit .net-core-3.1 azure-servicebus-queues


【解决方案1】:

如上面的 cmets 中所述,Azure 服务总线正在限制命名空间,迫使 Azure SDK 失败并在延迟 10 秒后自动重试操作。

请求已终止,因为命名空间受到限制。错误代码:50002。请等待 10 秒后重试

失败和随后的重试完全在 Azure SDK 组件中处理,对 MassTransit 不可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多