使用消息代理进行健康检查

healthcheck using message broker

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

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

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

有人有什么想法吗?

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

考虑在您的健康检查服务中也使用 rabbit event exchange - 这样它就能够从服务与交换所通信的渠道跟踪服务 connect/disconnects。通道应该一直保持运行状态,因此断开连接表示某种问题 - 特别是如果它之前没有服务(作为客户端)发送消息指示正常的关闭事件。 换句话说,作为健康“协议”——每个微服务都不会被健康服务轮询,而是主动发送“即将到来”、“准备就绪”、“健康”(定期),并向健康服务发送“下降”消息。

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