如何确保我的应用程序与RabbitMQ的连接处于健康状态?

4

我需要为我的Web应用程序(Tomcat war)设置一个Keepalive终端点。

这个终端点将被WAF周期性地采样,以确保应用程序正常运行。

健康的应用程序意味着应用程序正在运行,并且与RabbitMQ服务器(版本3.5.3 / spring-rabbit 1.4.5)的通信正常。

我将向我的WAF开放一些REST API来验证连接状态。
阅读文档后,我对如何实现这个功能感到困惑
我注意到有一些可能有用的功能,但我不确定:

  1. 启用自动恢复并使用RecoveryListener,确保最后一次恢复没有失败。
  2. 配置HeartBeat,并找出一种在“中断连接”时通知的方法
  3. 创建一些健康队列,并使用像Shovel这样的插件回显消息,如果我没有收到任何响应,则认为队列已经关闭
1个回答

4

实现健康检查不需要任何特殊工具,只需创建一个健康队列并进行发送/接收即可。

如果您正在使用Spring AMQP

rabbitTemplate.send("", "healthQueue", "foo");
String foo = rabbitTemplate.receive("healthQueue");

此外,您可以在Spring AMQP的连接工厂中注册ConnectionListener,当连接被创建/关闭时会通知您。
Spring AMQP从一开始就具有连接恢复功能,因此并不使用RabbitMQ客户端中相对较新的自动恢复功能。
如果您未使用Spring AMQP,请使用通道上的basicPublishbasicGet来发送/接收健康队列的消息。

仅仅使用Spring Boot中的org.springframework.boot.actuate.health.RabbitHealthIndicator或者在非Boot项目中采用相同的方法不就足够了吗? - Maciej Walkowiak
是的,那也可以,以验证连接仍然良好。发送/接收消息会深入挖掘一层。 - Gary Russell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接