首页 > 解决方案 > 使用消息代理进行健康检查

问题描述

我目前正在我的公司运行微服务。它们不是 api 服务器,只是相互通信的进程。所以相互通信的实现是RabbitMQ。

现在我正在尝试实现一个健康检查器,以了解服务器是否已重新启动或崩溃。但我只熟悉通过调用服务器中的特定 api 来使用健康检查。但是我们的服务不是 api 服务器,所以它们没有任何端口可以暗示。而且我也不想仅仅为了实现一个健康检查器而添加一个 api 服务器。

因此,我正在搜索有关通过 RabbitMQ 等消息代理向健康检查器发送消息(健康检查信号)而不是使用 API 来实现健康检查的任何用例。

有人有什么想法吗?

标签: rabbitmqmicroserviceshealth-check

解决方案


对于像您这样已经依赖消息队列的系统来说,这听起来像是一种明显而简单的机制。通过将特定消息发布到每个服务来实现您想要的任何架构 - 在单个交换中,每个服务(作为客户端)都将自己视为主题,或者在每个服务的交换中 - 或者您可以简单地拥有一个已读取的交换从健康检查服务和所有服务定期(死人风格)向该交换发出消息 - 该服务只是确保它偶尔听到任何人的消息。

还可以考虑在您的运行状况检查服务中使用rabbit 事件交换- 这样它就能够跟踪服务连接/断开与服务正在与交换进行通信的通道的连接。通道应该一直保持打开状态,因此断开连接表示某种故障 - 特别是如果它之前没有服务(作为客户端)发送消息指示正常的故障事件。 换句话说,作为一个健康“协议”——每个微服务不会被健康服务轮询,而是主动向卫生服务。

作为一般评论:在我看来,消息队列没有得到充分利用。与其他技术相比,它们更适合许多用例(例如,更流行的技术,如 REST over HTTP)。它们提供了内置于消息队列/消息代理概念的独特优势,否则您很可能需要为自己的用例提供这些优势(或使用提供它的“框架”)。我总是会考虑这个角色——所有的角色!- 系统架构中的消息代理,并在适合的地方使用它。


推荐阅读