文档章节

rabbitmq——trace

hncscwc
 hncscwc
发布于 2014/11/05 14:53
字数 1033
阅读 615
收藏 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
粉丝 67
博文 70
码字总数 76137
作品 0
杭州
程序员
私信 提问
消息中间件—RabbitMQ(集群监控篇1)

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

癫狂侠
05/28
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
2K
1
RabbitMQ 安装 —— Windows 7

RabbitMQ 安装 —— Windows 7 本文是在 Windows 7(64 bit)操作系统中安装 RabbitMQ 的指导。 下载并安装 Erlang,本文使用 ; 设置 Windows 环境变量 ,指向 Erlang 安装根目录,注意:如...

HiJ
11/29
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系列(一)RabbitMQ在Ubuntu上的环境搭建

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

王磊的博客
06/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
6
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
5
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部