Haim Raman
Haim Raman

Reputation: 12043

How to make sure that my Application connection to RabbitMQ is healthy?

I am required to set up a keepalive endpoint to my web application (tomcat war). The endpoint will be sampled periodically by my WAF to make sure that the app is healthy.

A healthy app means that the application is up and the communication to the RabbitMQ server (version 3.5.3 /spring-rabbit 1.4.5) is up and functional.

I will open some REST API to my WAF that will verify the connection status.
Reading the documentation I am quite lost on how to implement this functionally.
I noticed some functionality that may help, but I am not sure:

  1. Enable automatic recovery and use RecoveryListener and make sure that the last recovery did not fail.
  2. Configure HeartBeat and figure out a way to be notified on “disrupted connections”
  3. Create some Heath Queue and use a plugin like Shovel to echo back the message, if I do not get any response I assume the queue is down

Upvotes: 4

Views: 4951

Answers (1)

Gary Russell
Gary Russell

Reputation: 174769

You don't need anything special like shovel to implement a health check. Just create a health queue and send/receive to/from it.

If you are using Spring AMQP

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

In addition, you can register a ConnectionListener with Spring AMQP's connection factory and you will be notified when the connection is created/closed.

Spring AMQP has had connection recovery from the beginning so the (relatively new) built-in auto recovery in the rabbitmq client is not used.

If you are not using Spring AMQP use basicPublish and basicGet on a channel to send/receive to/from a health queue.

Upvotes: 4

Related Questions