如何解决与 rabbit mq 的 MassTransit 连接问题消息丢失
我在我们的 c# 应用程序中实现了公共交通公共发布器,它在大多数情况下都运行良好,没有任何问题。但是我们注意到最近当 RabbitMq 出现故障时消息丢失了。如果连接尚未建立或无法在启动时建立,则应用程序将按预期抛出,并对其进行处理和记录以供查看。但是如果连接在运行中消失,那么由于某种原因没有任何东西被抛出并且消息只是丢失了..有没有办法在我们“发布”之前检查这个设置的连接状态,因为如果连接断开,IsStarted状态不会改变。
这里是我们使用的代码片段(这里只显示发布部分)
_messagePublisher.Start();
...
if (_messagePublisher.IsStarted)
{
await _messagePublisher.Publish(attempt,_messageRouter.ObtainRoutingKey(attempt));
}
else {//Do stuff}
解决方法
如果您丢失消息,则不是 MassTransit 造成的。当 Publish
被调用时,它不会返回直到消息被 RabbitMQ 传递和确认——除非你指定一个 CancellationToken
并取消它,在这种情况下会抛出异常。
IsStarted
不是任何 MassTransit 接口的属性,因此您可以查看该属性是如何实现的。总线上有一个对 CheckHealth
的调用,可用于验证代理连接的健康状态。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。