我在C#中有2个Windows服务。 服务1将消息发布到RabbitMQ队列。 服务2订阅RabbitMQ队列。 服务2还连接到TCP服务器,并将从RabbitMQ收到的消息发送到此服务器。 我的问题是,有什么方法可以阻止服务1将消息发布到队列,因为消耗此消息的服务2由于某些错误而失败(主要是SocketException,如果它无法连接到服务器)。 任何指针都非常有用。 如果需要更多信息,请告诉我。
先谢谢。
答案 0 :(得分:0)
关于如何处理它的一些(自以为是的)观点:
一种选择是在两者之间创建某种hartbeat消息传递系统 并且检查服务是否按时间间隔是否正常,这有些事情发生了 在你做一次检查之后和下一次检查之前。
另一种方法是向服务1添加一个锁定标志,使其停止发送到服务2 并通过让服务2在异常时将消息发送回服务1来切换标志, 但是对于这个,你需要检查呼叫何时再次开始工作 将服务1切换回ON状态。
您可以向服务1添加指数退避,这将具有不泛滥的优势 服务2,也避免了消息的检查和乒乓,其缺点是 退避时间可能会变得非常大。
干杯