RabbitMQ 消息监控

一、为什么需要消息追踪?

使用MQ时经常会有这样的场景:
生产者成功发送消息,消费者却找不到消息!?
为什么会出现这种消息异常丢失的情况呢?有可能是编码导致的逻辑错误,比如交换机与队列的绑定问题、交换机的转发策略问题;也有可能是不可避免的网络连接问题、集群分布问题…这时便需要一个跟踪消息的机制,来帮我们定位到消息失踪的原因。
在RabbitMQ中,可以使用 Firehoserabbitmq_tracing 插件来进行消息追踪。

缺点:一旦开启,会影响性能

二、Firehose

1、Firehose原理

生产者投递给RabbitMQ的消息、消费者从RabbitMQ取出的消息,都会将这个消息的跟踪信息发送到一个默认的交换机上。
这个默认的交换机名称为 amq.rabbitmq.trace ,这是一个topic类型的交换机;发送到这个交换机上的消息的routingKey为 publish.实际发生投递原消息动作的交换机名称 或者 deliver.实际发生消费原消息动作的队列名称

2、Firehose 使用

开启/关闭Firehose 命令

$ rabbitmqctl trace_on [-p /虚拟机名称]
$ rabbitmqctl trace_off [-p /虚拟机名称]

虽说核心是amq.rabbitmq.trace交换机,但是我们还需要手动的创建队列,然后与这个默认交换机绑定;想要看到具体的跟踪信息,还要找到我们手动创建的队列,然后在该队列里找到我们想要的跟踪信息。

三、rabbitmq_tracing

rabbitmq_tracing插件相当于Firehose插件的GUI版本。
开启/关闭rabbitmq_tracing命令

$ rabbitmq-plugins enable rabbitmq_tracing
$ rabbitmq-plugins disable rabbitmq_tracing

开启插件,重启mq后打开rabbitmq的ui界面
在这里插入图片描述

1、format:一般选择text模式方便人去查看;json模式进行base64编码,是方便以后导出用来做程序分析的
2、pattern:用#,表示无论是发起方发送消息还是接收方接收消息,都做记录;用publish.#,表示只记录发起方发送记录;用deliver.#,表示只记录接收方处理记录

参考文章:
http://t.csdn.cn/ZW84k
http://t.csdn.cn/2Bkzf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值