Firehose Tracer
概述
有时,在开发或调试过程中,能够看到所有已发布的消息以及所有已传递的消息非常有用。RabbitMQ 有一个“firehose”功能,管理员可以在每个节点、每个虚拟主机的基础上启用一个交换机,所有发布和传递的通知都将被抄送(CC)到这个交换机。
这些通知非常接近实际网络通信的内容——例如,您将看到未确认的消息。
当该功能关闭时,它对性能没有影响;当它开启时,由于生成和路由了额外的消息,性能会略有下降。
启用 Firehose
在启用该功能之前,请决定要在哪个节点和哪个虚拟主机上启用它。以下示例假定使用默认虚拟主机“/”和默认节点“rabbit@(hostname)”。使用 -n 参数可以指定其他节点,使用 -p 参数可以指定其他虚拟主机。
接下来,在选定的虚拟主机中声明队列,将它们绑定到主题交换机 amq.rabbitmq.trace,然后开始消费。
最后,要使用...启用 firehose 跟踪
rabbitmqctl trace_on -p [virtual host]
禁用 Firehose
要禁用 Firehose,请运行
rabbitmqctl trace_off -p [virtual host]
不要忘记清理用于从 Firehose 消费事件的任何队列。
请注意,firehose 状态不是持久化的;在服务器启动时,它将默认关闭。
Firehose 事件消息格式
firehose 将消息发布到主题交换机 amq.rabbitmq.trace。在本节中,我们将通过 Firehose 机制消费和检查的消息称为“跟踪消息”。
跟踪消息的路由键将是“publish.{exchangename}”(针对进入节点的 PUSH 消息)或“deliver.{queuename}”(针对传递给消费者的消息)。
包含有关原始消息元数据的跟踪消息头
| Header | 类型 | 描述 |
|---|---|---|
| exchange_name | longstr | 消息被发布的交换机的名称 |
| routing_keys | array | 路由键以及 |
| properties | table | 内容属性(消息元数据) |
| 节点 | longstr | 生成跟踪消息的 Erlang 节点 |
| redelivered | signedint | 消息是否设置了重传标志(仅针对离开代理的消息) |
与原始消息体对应的跟踪消息体。
跟踪插件
rabbitmq_tracing 插件建立在 tracer 的基础上,并提供了一个 GUI 来捕获跟踪消息,并将它们以文本或 JSON 格式记录到文件中。