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.
The firehose publishes messages to the topic exchange amq.rabbitmq.trace with
|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|
|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)|
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.