大伙可以到我的RabbitMQ专栏获取更多信息
什么是消息追踪
在使用任何消息中间件的过程中,难免会遇到消息由于某些意外事件丢失的情况。
对于RabbitMQ而言:
- 可能是生产者、消费者于MQ的连接不稳定,网络波动甚至断连,RabbitMQ也针对生产者和消费者分别提供了对应的消息可靠性机制
- 也有可能是交换机于队列之间的分发策略导致的消息丢失
- RabbitMQ自身的集群策略也有可能导致消息的丢失
- ......
此时就要采取一些较为完善的消息追踪机制,来跟踪消息从产生到被消费整个传递的链路,从而协助运维和开发人员快速定位问题。
对于RabbitMQ来说,可以使用Firehose和RabbitMQ_tracing插件来实现消息的追踪。
Firehose
Firehose的机制:
当生产者发送消息给到MQ的时候,RabbitMQ会同样发送一条一样的消息(且消息信息更加详细)到默认的exchange上,这个默认的exchange为amq.rabbitmq.trace,他是一个topic类型的exchange。发送到这个exchange上的Routing key为publish.exchangename和deliver.queuename。其中"exchangename"的字符串内容为实际生产者发送到的exchange的名称,"queuename"的字符串为该消息被分发到的队列名称。
以上相当于“复制一份”消息的机制,就可以满足消息的追踪所需要的必要信息的记录。由于这条“复制”的消息的所经过的exchange和queue都是RabbitMQ内部交换机和队列,且都都是持久化的(durable=true),所以是相对安全的。
注意:
打开trace会影响消息的接入功能,请酌情使用。
rabbitmqctl trace_on:开启Firehose
rabbitmqctl trace_off:关闭Firehose
RabbitMQ_tracing
使用命令开启插件:
rabbitmq-plugins enable rabbitmq_tracing
rabbitmq-plugins disable rabbtimq_tracing
重启RabbitMQ之后生效
开启该插件之后管理后台会发生变化
创建一个trace
创建之后会有一个日志文件产生,这里面就会记录关于这个vhost下发送消息的详细信息