c# – MassTransit如何处理RabbitMQ下降
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – MassTransit如何处理RabbitMQ下降,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1417字,纯文字阅读大概需要3分钟。
内容图文
为了处理间歇性的RabbitMQ连接问题或RabbitMQ完全失效,将MassTransit配置为容错的正确方法是什么?我在两台不同的机器之间设置了一个RabbitMQ集群,并配置了HA,以便镜像所有内容.我还在主动/被动模式下设置了F5负载均衡器,以便将所有流量定向到主节点,但如果运行状况检查失败,则会故障转移到辅助节点.我希望在这样的故障转移之后任何客户端连接都会继续成功,但我在这里遇到了麻烦.当我在主节点上停止RabbitMQ时,客户端应用程序开始记录一堆MassTransit错误,如下所示:
RabbitMQ connection failed: Connect failed: myrabbithost.mycompany.com:5671/
即使没有发生任何活动,也会发生这些错误 – 没有发布,Client.Request等.最终,由于MassTransit明显放弃连接而导致错误停止,客户端应用程序崩溃.在查看MassTransit源代码时,我认为它是在“RetryUntilCancelled”方法中生成这些错误的RabbitMqReceiveTransport.Receive.它看起来正在使用内部的ConnectionRetryPolicy,那么有什么东西可以配置吗?
我在Global.asax中实例化我的总线实例,启动它并在IIS启动时将其保留在内存中,我不知道这是否是一个问题;在使用Unity容器查看MassTransit的文档时,看起来推荐的做法是允许Unity默认使用TransientLifetimeManager,以便每次容器解析时都会拆除并重新创建总线实例.
解决方法:
这些客户端崩溃正在发生,因为我正在使用Task.Wait(),如下所示:
Task.Run(() => bus.Publish(new TestMessage { Id = num })).Wait();
而不是这个:
Task.Run(() => bus.Publish(new TestMessage { Id = num }));
如果没有.Wait(),即使RabbitMQ出现故障,客户端也会保持正常运行状态.现在的问题是,当RabbitMQ发生故障但在F5故障转移到辅助节点之前发送的任何消息都将丢失.
内容总结
以上是互联网集市为您收集整理的c# – MassTransit如何处理RabbitMQ下降全部内容,希望文章能够帮你解决c# – MassTransit如何处理RabbitMQ下降所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。