0

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

提前致谢。

4

1 回答 1

0

关于如何处理它的一些我的(自以为是的)想法:

  1. 一种选择是在两者之间创建某种 hartbeat 消息传递系统,并每隔一段时间检查服务是否正常,这会在您进行一次检查之后和下一次检查之前发生一些事情的缺点。

  2. 另一种方法是向服务 1 添加一个锁定标志,以使其停止向服务 2 发送并通过让服务 2 在出现异常时向服务 1 发送消息来切换该标志,但对于此情况,您需要每隔一段时间再检查一次呼叫再次开始工作并将服务 1 切换回 ON 状态。

  3. 您可以向服务 1 添加指数退避,这将具有不会淹没服务 2 的好处,并且还可以避免消息的检查和乒乓球,缺点是退避时间可能会变得非常大。

干杯

于 2017-08-02T01:18:56.953 回答