- 在使用任何消息中间件的过程中,难免会出现消息丢失等异常情况,这个时候就需要有一个良好的机制来跟踪记录消息的过程(轨迹溯源),帮助我们排查问题。
- 在RabbitMQ 中可以使用Firehose 功能来实现消息追踪,Firehose 可以记录每一次发送或者消费消息的记录,方便RabbitMQ 的使用者进行调试、排错等。
- Firehose 的原理是将生产者投递给RabbitMQ 的消息,或者RabbitMQ 投递给消费者的消息按照指定的格式发送到默认的交换器上。这个默认的交换器的名称为amq.rabbitmq.trace ,它是一个topic 类型的交换器。发送到这个交换器上的消息的路由键为publish.{exchangename} 和deliver.{queuename} 。其中exchangename 和queuename 为交换器和队列的名称,分别对应生产者投递到交换器的消息和消费者从队列中获取的消息。
开启Firehose命令:
rabbitmqctl trace_on [-p vhost]
其中[-p vhost]是可选参数,用来指定虚拟主机vhost。
对应的关闭命令为:
rabbitmqctl trace_off [-p vhost]
Firehose 默认情况下处于关闭状态,并且Firehose 的状态是非持久化的,会在RabbitMQ服务重启的时候还原成默认的状态。Firehose 开启之后多少会影响RabbitMQ 整体服务性能,因为它会引起额外的消息生成、路由和存储。
rabbitmq_tracing 插件相当于Firehose 的GUI 版本,它同样能跟踪RabbitMQ 中消息的流入流出情况。rabbitmq_tracing 插件同样会对流入流出的消息进行封装,然后将封装后的消息日志存入相应的trace 文件中。
可以使用命令来启动rabbitmq_ tracing 插件
rabbitmq-plugins enable rabbitmq_tracing
使用命令关闭该插件。
rabbitmq-plugins disable rabbitmq_tracing
- Name表示rabbitmq_tracing的一个条目的名称,Format可以选择Text或JSON,连接的用户名写root,密码写123456。
- Pattern:发布的消息:publish.<exname>
- Pattern:消费的消息:deliver.<queuename>