azureservicebus - 使用 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 秒
解决方案
正如上面评论中所解释的,Azure 服务总线正在限制命名空间,迫使 Azure SDK 失败并在延迟 10 秒后自动重试操作。
由于命名空间受到限制,请求已终止。错误代码:50002。请等待 10 秒,然后重试
失败和随后的重试完全在 Azure SDK 组件中处理,对 MassTransit 不可见。
推荐阅读
- javascript - Angularjs嵌套选项卡绑定到json
- javascript - 全局变量未在函数内更新
- postgresql - 使用包含状态字段的复合主键优化数据集
- javascript - 该 css 文件未出现在检查谷歌中
- linux - Tomcat 重启时启动:init.d 脚本不成功
- mysql - Spring Boot JPA 一对一映射生成 StackOverflow 错误
- java - 如何通过 RestAPI 使用 commitId 从 Bitbucket 下载文件?
- android - 向生成的会话发送响应
- eclipse - 为什么当 Maven 构建工作良好但将 Spark Jar 添加为外部 Jars 时会出现编译错误“对象 Apache 不是包 org 的成员”
- vuetify.js - 在这种情况下,如何让 v-flex 正确使用填充高度?