【问题标题】:healthcheck using message broker使用消息代理进行健康检查
【发布时间】:2021-07-25 16:10:01
【问题描述】:

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

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

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

有人有什么想法吗?

【问题讨论】:

  • 对于像您这样已经依赖消息队列的系统来说,这听起来像是一种显而易见且简单的机制。通过将特定消息发布到每个服务来实现您想要的任何架构 - 在单个交换中,每个服务(作为客户端)都将自己视为主题,或者在每个服务的交换中 - 或者您可以简单地拥有一个已读取的交换从健康检查服务和所有服务定期(死人风格)向该交换发出消息 - 该服务只是确保它偶尔听到任何人的消息。让我们知道您的工作成果!
  • 考虑在您的健康检查服务中也使用rabbit event exchange - 这样它就能够跟踪服务与交换所使用的通道的连接/断开连接。通道应该一直保持打开状态,因此断开连接表明存在某种问题 - 特别是如果它之前没有由服务(作为客户端)发送的指示正常下降事件的消息。
  • 谢谢。我和你的想法完全一样。我只是想知道,因为这不是使用消息代理实现健康检查器的正常方法,因此使用它可能是一个不好的模式。但现在我建议这种方式是首选方式。
  • IMO 消息队列非常未充分利用。与其他技术相比,它们更适合许多用例(例如,更流行的技术,如 REST over HTTP)。它们提供了内置于消息队列/消息代理概念的独特优势,否则您很可能需要为自己的用例提供这些优势(或使用提供它的“框架”)。我总是会考虑这个角色——所有的角色! - 系统架构中的消息代理,并在适合的地方使用它。
  • (我将这些 cmets 提升为答案。)

标签: rabbitmq microservices health-check


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-20
    • 2019-08-26
    • 2014-10-02
    • 2018-06-15
    • 2019-08-17
    • 1970-01-01
    • 2022-01-06
    • 2020-01-02
    相关资源
    最近更新 更多