Sometimes, during development or debugging, it’s useful to be able to see every message that is published, and every message that is delivered. RabbitMQ has a “firehose” feature, where the administrator can enable (on a per-node, per-vhost basis) an exchange to which publish- and delivery-notifications should be CCed.
These notifications are close to what’s happening on the wire - for example you will see unacked messages.
When the feature is switched off, it has no effect on performance; when it is switched on, performance will drop somewhat due to additional messages being generated and routed.
- Decide which node, and which vhost, you want to enable it for. In the examples below, we assume the default vhost, “/”, and the default node “rabbit@(hostname)”. Use the -n argument to specify a node other than, and the -p argument to specify another vhost.
- Within your chosen vhost create queues, bind them to the topic exchange amq.rabbitmq.trace, and begin consuming.
- Run rabbitmqctl trace_on.
- Run rabbitmqctl trace_off.
- Clean up the queues used by the firehose.
The firehose publishes messages to the topic exchange amq.rabbitmq.trace with
- routing key either “publish.exchangename”, for messages entering the broker, or “deliver.queuename”, for messages leaving the broker;
headers containing metadata about the original message:
Header Type Description exchange_name longstr name of the exchange to which the message was published routing_keys array routing key plus contents of CC and BCC headers properties table content properties node longstr Erlang node on which the trace message was generated redelivered signedint whether the message has its redelivered flag set (messages leaving the broker only)
body corresponding to the body of the original message
The rabbitmq_tracing plugin builds on top of the tracer and provides a GUI to capture traced messages and log them in text or JSON format files.