文档章节

rabbitmq——trace

hncscwc
 hncscwc
发布于 2014/11/05 14:53
字数 1033
阅读 572
收藏 4

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

rabbitmq的官网介绍了两种trace的方式,一种称之为“firehose”,另一个是rabbitmq_tracing插件。这两种方式都能对经过rabbitmq的消息进行跟踪记录。

1. firehose

firehose的机制是将生产者投递给rabbitmq的消息,rabbitmq投递给消费者的消息按照指定的格式发送到默认的exchange上。这个默认的exchange的名称为amq.rabbitmq.trace,它是一个topic类型的exchange。发送到这个exchange上的消息的routing key为 publish.exchangename 和 deliver.queuename。其中exchangename和queuename为实际exchange和queue的名称,分别对应生产者投递到exchange的消息,和消费者从queue上获取的消息。

简单使用步骤:

  • 通过命令开启firehose
rabbitmqctl trace_on
这个命令还可以通过参数 -p 指定 vhost。
  • 创建queue并绑定到exchange(amq.rabbitmq.trace)

这里通过两个routing key收取所有生产者发送的消息和发送给消费者的消息。

  • 测试验证

创建一个名为hello的queue,生产者通过默认的exchange——amq.direct发送消息,内容为hello world。

那么可以看到创建的trace-example队列里有两条消息,一条为生产者发送给rabbitmq的消息,一条为消费者从hello队列中消费的消息。

从上面的使用流程可以看出:这种机制可以记录rabbitmq中消息的流入流出情况,但是不够友好的是需要自行创建queue,从queue中取出消息来查看消息的收发情况。

2. rabbitmq_tracing plugin

rabbitmq_tracing插件同样能跟踪rabbitmq中消息的流入流出情况,通过这个插件我们可以在管理界面上进行简单操作,rabbitmq会将消息的收发情况记录到日志中。

简单使用:

  • 启用插件
rabbitmq-plugins enable rabbitmq_tracing
  • 增加trace

如上图所示,增加两个trace,一个记录所有生产者发送到rabbitmq的消息,一个记录所有消费者消费的消息。

  • 测试验证

使用前面创建的queue并发送消息。

点击from_p.log可以看到这样的日志:

日志中记录的是rabbitmq已经接收的来自生产者的消息,具体包括当前节点的名称,exchange的名称,routing key以及具体的消息内容

而to_c.log中可以看到:

这里记录的是消费者从queue中消费的消息。具体包括消息是从哪个exchange发来的,queue的名称,以及消息的内容等等。

注:这个日志里记录的仅仅是rabbitmq发送给消费者的消息,而不管该消息是否需要被确认,或者该消息是否已经被确认。另外没有被消费者消费的消息不会被记录。

通过这样一个例子可以验证这一点:创建一个fanout类型的exchange,创建两个queue并绑定到这个exchange上,其中一个queue上有消费者同时开启ack机制,然后往exchange上发送消息,结果如图所示:

另外,这两个日志默认存储在/var/tmp/rabbitmq-tracing下。

=====================================================

总结,firehose可以理解为rabbitmq提供了接口供远程访问,例如定制开发一个客户端远程连接到rabbitmq上创建队列并绑定到amq.rabbitmq.trace上收取trace的消息并进行处理。而rabbitmq_tracing插件则使用相对方便许多,也能较好的协助运维人员对rabbitmq进行运维。

© 著作权归作者所有

共有 人打赏支持
hncscwc
粉丝 66
博文 70
码字总数 76137
作品 0
杭州
程序员
消息中间件—RabbitMQ(集群监控篇1)

摘要:任何没有监控的系统上线,一旦在生产环境发生故障,那么排查和修复问题的及时性将无法得到保证 一、为何要对消息中间件进行监控? 上线的业务系统需要监控,然而诸如消息队列、数据库、...

癫狂侠
05/28
0
0
Rabbit - Error: mnesia_unexpectedly_running

Centos6.2 下的 rabbitmq报错 [root@HK-210209127027 ~]# php /var/www/html/rabbitmq/receive.php PHP Fatal error: Uncaught exception 'AMQPConnectionException' with message 'Socket ......

sunny5156
2013/06/07
0
0
rabbitmq启动失败,noproc

rabbitmq启动失败 [root@localhost bin]# rabbitmq-server BOOT FAILED =========== Error description: noproc Log files (may contain more information): /var/log/rabbitmq/rabbit@local......

code强迫症xr
08/09
0
0
RabbitMQ系列(一)RabbitMQ在Ubuntu上的环境搭建

环境配置 Ubuntu Server 18.04 RabbitMQ 3.6.10 安装之前 我们使用apt-get进行RabbitMQ安装,在安装之前,强烈建议您把apt源换位国内,大大增加下载安装的速度,点击查看:《Ubuntu apt-get和...

王磊的博客
06/14
0
0
【原创】rabbitmq-env.conf用户手册(翻译)

官方原文:http://www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html =============== 我是分割线 ================ 名字 rabbitmq-env.conf — RabbitMQ AMQP server 的默认配置文件 描述......

摩云飞
2013/01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
今天
4
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
5
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
158
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部