Firehose 追踪器
概述
有时,在开发或调试过程中,能够查看每一条已发布和已投递的消息非常有用。RabbitMQ 具有“Firehose”功能,管理员可以开启该功能(基于每个节点、每个虚拟主机),将发布和投递的通知抄送(CC)到一个交换机中。
这些通知非常接近底层实际发生的传输情况——例如,你会看到尚未确认(unacked)的消息。
当此功能关闭时,对性能没有影响;当它开启时,由于会生成并路由额外的消息,性能会有所下降。
开启 Firehose
在开启此功能之前,请决定要在哪个节点和哪个虚拟主机(vhost)上开启。以下示例假设使用默认的虚拟主机“/”和默认节点“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 机制消费和检查的消息称为“追踪消息”。
追踪消息的路由键(routing key)将是“publish.{exchangename}”(针对进入节点的消息)或“deliver.{queuename}”(针对投递给消费者的消息)。
包含原始消息元数据的追踪消息头:
| Header | 类型 | 描述 |
|---|---|---|
| exchange_name | longstr | 消息发布到的交换机名称 |
| routing_keys | array | 路由键以及 |
| properties | table | 内容属性(消息元数据) |
| 节点 | longstr | 生成追踪消息的 Erlang 节点 |
| redelivered | signedint | 消息的 redelivered(重投)标志位是否已设置(仅适用于离开 Broker 的消息) |
追踪消息体,对应于原始消息的消息体。
追踪插件
rabbitmq_tracing 插件构建在追踪器之上,并提供了一个图形界面来捕获追踪消息,并将其记录在文本或 JSON 格式的文件中。