首页 > 解决方案 > 使用 MassTransit 在 Azure 服务总线上发布消息时断时续

问题描述

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

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

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

这是我们日志中的一个片段:

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 秒

在此处输入图像描述

标签: azureservicebusmasstransit.net-core-3.1azure-servicebus-queues

解决方案


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

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

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


推荐阅读