前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >18-RabbitMQ高级特性-消息追踪

18-RabbitMQ高级特性-消息追踪

作者头像
Devops海洋的渔夫
发布2023-02-10 13:59:01
3430
发布2023-02-10 13:59:01
举报
文章被收录于专栏:Devops专栏Devops专栏

18-RabbitMQ高级特性-消息追踪

消息追踪

在使用任何消息中间件的过程中,难免会出现某条消息异常丢失的情况。对于 RabbitMQ 而言,可能是因为生产者或消费者与RabbitMQ 断开了连接,而它们与 RabbitMQ 又采用了不同的确认机制;也有可能是因为交换器与队列之间不同的转发策略;甚至是交换器并没有与任何队列进行绑定,生产者又不感知或者没有采取相应的措施;另外 RabbitMQ 本身的集群策略也可能导致消息的丢失。这个时候就需要有一个较好的机制跟踪记录消息的投递过程,以此协助开发和运维人员进行问题的定位。

在 RabbitMQ 中可以使用 Firehose 和 rabbitmq_tracing 插件功能来实现消息追踪。

消息追踪-Firehose

firehose的机制是将生产者投递给rabbitmq的消息,rabbitmq投递给消费者的消息按照指定的格式发送到默认的exchange上。

这个默认的exchange的名称为 amq.rabbitmq.trace ,它是一个topic类型的exchange。

发送到这个exchange上的消息的routing key为 publish.exchangename 和 deliver.queuename。

其中exchangename和queuename为实际exchange和queue的名称,分别对应生产者投递到exchange的消息,和消费者从queue上获取的消息。

注意:打开 trace 会影响消息写入功能,适当打开后请关闭。

代码语言:javascript
复制
# 开启Firehose命令
rabbitmqctl trace_on

# 关闭Firehose命令
rabbitmqctl trace_off

演示

1.查看日志跟踪交换机 amq.rabbitmq.trace
2.创建队列,并且与 日志跟踪交换机 amq.rabbitmq.trace 绑定

创建一个 test_trace 的队列,下面我们回到交换机 amq.rabbitmq.trace 详情页进行绑定如下:

3.在队列 test_trace 发送一条消息,查看确认消息

查看队列的消息如下:

4.开启 Firehose 功能
代码语言:javascript
复制
rabbitmqctl trace_on

执行命令如下:

代码语言:javascript
复制
root@d52d13792d25:/# rabbitmqctl trace_on
Starting tracing for vhost "/" ...
Trace enabled for vhost /
root@d52d13792d25:/# 
5.在队列 test_trace 发送一条消息,查看确认消息

再来查看队列里面的消息:

4. 关闭 Firehose 功能
代码语言:javascript
复制
rabbitmqctl trace_off

执行如下:

代码语言:javascript
复制
root@d52d13792d25:/# rabbitmqctl trace_off
Stopping tracing for vhost "/" ...
Trace disabled for vhost /
root@d52d13792d25:/# 

小结

简单来说就是创建一个队列(任意的)绑定 amq.rabbitmq.trace 交换机上即可。

当然还要命令行开启跟踪功能。

消息追踪-rabbitmq_tracing

rabbitmq_tracing和Firehose在实现上如出一辙,只不过rabbitmq_tracing的方式比Firehose多了一层GUI的包装,更容易使用和管理。

启用插件:

代码语言:javascript
复制
rabbitmq-plugins enable rabbitmq_tracing

演示

1.启动跟踪插件
代码语言:javascript
复制
# 查看当前跟踪插件的状态:未启用
root@d52d13792d25:/# rabbitmq-plugins list | grep rabbitmq_tracing
[  ] rabbitmq_tracing                  3.9.13
root@d52d13792d25:/# 
# 启动跟踪插件
root@d52d13792d25:/# rabbitmq-plugins enable rabbitmq_tracing
Enabling plugins on node rabbit@d52d13792d25:
rabbitmq_tracing
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_tracing
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@d52d13792d25...
The following plugins have been enabled:
  rabbitmq_tracing

started 1 plugins.
# 查看状态已启用
root@d52d13792d25:/# rabbitmq-plugins list | grep rabbitmq_tracing
[E*] rabbitmq_tracing                  3.9.13
root@d52d13792d25:/# 

启用插件后,Web管理页面的 Admin 选项增加了 Tracing 跟踪日志,如下:

2.增加日志跟踪的虚拟机

此时任何所有的消息都会发送到日志中。

3.在任意队列发送消息
4.查看跟踪的日志
5.停用跟踪插件
代码语言:javascript
复制
# 停用插件
root@d52d13792d25:/# rabbitmq-plugins disable rabbitmq_tracing
Disabling plugins on node rabbit@d52d13792d25:
rabbitmq_tracing
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@d52d13792d25...
The following plugins have been disabled:
  rabbitmq_tracing

stopped 1 plugins.
# 查看插件的z
root@d52d13792d25:/# rabbitmq-plugins list | grep rabbitmq_tracing
[  ] rabbitmq_tracing                  3.9.13
root@d52d13792d25:/# 

小结

开启日志跟踪功能虽然可以跟踪日志的信息,但是也会影响 rabbitmq 的性能(每一条消息都要被转发记录),所以尽量只在排查问题的时候开启。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 18-RabbitMQ高级特性-消息追踪
    • 消息追踪
      • 消息追踪-Firehose
        • 演示
        • 小结
      • 消息追踪-rabbitmq_tracing
        • 演示
        • 小结
    相关产品与服务
    消息队列 TDMQ
    消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档