RabbitMQ - 当订阅服务失败并出现一些错误时,如何停止发布服务

时间:2017-08-01 22:19:30

标签: c# rabbitmq rabbitmq-exchange easynetq rabbitmqctl

我在C#中有2个Windows服务。 服务1将消息发布到RabbitMQ队列。 服务2订阅RabbitMQ队列。 服务2还连接到TCP服务器,并将从RabbitMQ收到的消息发送到此服务器。 我的问题是,有什么方法可以阻止服务1将消息发布到队列,因为消耗此消息的服务2由于某些错误而失败(主要是SocketException,如果它无法连接到服务器)。 任何指针都非常有用。 如果需要更多信息,请告诉我。

先谢谢。

1 个答案:

答案 0 :(得分:0)

关于如何处理它的一些(自以为是的)观点:

  1. 一种选择是在两者之间创建某种hartbeat消息传递系统 并且检查服务是否按时间间隔是否正常,这有些事情发生了 在你做一次检查之后和下一次检查之前。

  2. 另一种方法是向服务1添加一个锁定标志,使其停止发送到服务2 并通过让服务2在异常时将消息发送回服务1来切换标志, 但是对于这个,你需要检查呼叫何时再次开始工作 将服务1切换回ON状态。

  3. 您可以向服务1添加指数退避,这将具有不泛滥的优势 服务2,也避免了消息的检查和乒乓,其缺点是 退避时间可能会变得非常大。

  4. 干杯