RabbitMQ高级特性——消息追踪(记录消息的传递日志)

大伙可以到我的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),所以是相对安全的。

RabbitMQ高级特性——消息追踪(记录消息的传递日志)_第1张图片

注意:

打开trace会影响消息的接入功能,请酌情使用。

rabbitmqctl trace_on:开启Firehose
rabbitmqctl trace_off:关闭Firehose

RabbitMQ_tracing

使用命令开启插件:

rabbitmq-plugins enable rabbitmq_tracing
rabbitmq-plugins disable rabbtimq_tracing

重启RabbitMQ之后生效

RabbitMQ高级特性——消息追踪(记录消息的传递日志)_第2张图片

开启该插件之后管理后台会发生变化

RabbitMQ高级特性——消息追踪(记录消息的传递日志)_第3张图片创建一个trace

RabbitMQ高级特性——消息追踪(记录消息的传递日志)_第4张图片

RabbitMQ高级特性——消息追踪(记录消息的传递日志)_第5张图片

创建之后会有一个日志文件产生,这里面就会记录关于这个vhost下发送消息的详细信息

 

 

 

 

 

 

 

 

你可能感兴趣的:(#,RabbitMQ,rabbitmq,消息追踪,rabbitmq日志,trace,tracing)