文档章节

rabbitmq——trace

hncscwc
 hncscwc
发布于 2014/11/05 14:53
字数 1033
阅读 529
收藏 4
点赞 0
评论 0

在使用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
粉丝 65
博文 70
码字总数 76137
作品 0
杭州
程序员
消息中间件—RabbitMQ(集群监控篇1)

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

癫狂侠
05/28
0
0
【1】安装rabbitmq server

安装erlang 1、下载源码wget http://www.erlang.org/download/otpsrcR16B02.tar.gz 2、安装erlang编译环境: yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-deve......

不羁青年
2015/08/16
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
【原创】rabbitmq-echopid用户手册(翻译)

为了方便工作中使用,周末抽空对 rabbitmq-echopid 用户手册进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生,如果疑问,欢迎指出探讨。 官方原文:http://www.rabbitmq.com/man/rabbi...

摩云飞
2012/11/12
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-server用户手册(翻译)

为了方便工作中使用,周末抽空对rabbitmq-server用户手册进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生,如果疑问,欢迎指出探讨。 官方原文:http://www.rabbitmq.com/man/rabbitmq-...

摩云飞
2012/11/12
0
0
RabbitMQ在Ubuntu上的环境搭建

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

vipstone
06/14
0
0
RabbitMQ 内存控制 硬盘控制

一、内存控制: vmmemoryhigh_watermark 该值为内存阈值,默认为0.4。意思为物理内存的40%。40%的内存并不是内存的最大的限制,它是一个发布的节制,当达到40%时Erlang会做GC。最坏的情况是使...

andrewniu
05/10
0
0
【原创】rabbitmq-plugins用户手册(翻译)

为了方便工作中使用,周末抽空对 rabbitmq-plugins 用户手册进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生,如果疑问,欢迎指出探讨。 官方原文:http://www.rabbitmq.com/man/rabbi...

摩云飞
2012/11/12
0
0
Centos7部署RabbitMQ 3.7.6

简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是...

阿dai
07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zk实战--rpc框架集群化

在看此篇内容时需要浏览下面内容 netty实战--手写rpc框架 前文功能简介以及功能扩充 利用netty来实现一个点对点的rpc调用。客户端和服务端都是靠手写地址进行socket同学的,无法1对多,也无法...

xpbob
15分钟前
7
0
springboot 发送邮件

获取授权码 添加配置 # 账号和密码spring.mail.username=aaa@qq.comspring.mail.password=bbb# 服务器地址spring.mail.host=smtp.qq.comspring.mail.properties.mail.smtp.ssl.en...

阿豪boy
15分钟前
0
0
如何使用GNU Ring?

文章名:如何使用GNU Ring? 作者:冰焰火灵X 1079092922@qq.com 文章许可:CC BY-SA 4.0 ##1. 安装 下载GNU Ring 点击左边选择你的系统版本(这里以 GNU/Linux 为例,我使用的是Mint 18.3)...

ICE冰焰火灵X
18分钟前
1
0
深入理解springMVC

什么是spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而...

Java填坑之路
24分钟前
1
0
《射雕英雄传》书摘

1. 我虽是个飘泊江湖的贫家女子,可不是低三下四、不知自爱之人。你如真心爱我,须当敬我重我。我此生决无别念,就是钢刀架颈,也决意跟定了你。将来……将来如有洞房花烛之日,自然……自能...

k91191
34分钟前
0
0
解决:modal中datePicker 选中时,会触发modal的hidden.bs.modal事件

最近项目中发现了一个bug,具体表现为选中模态框上datepicker组件上的日期时,会触发模态框的关闭事件,导致数据编辑无法正常进行。网上搜索了下,解决方法如下: $('.datepicker').on('hid...

Funcy1122
38分钟前
0
0
Redis分布式锁的正确实现方式

前言 分布式锁一般有三种实现方式: 1.数据库乐观锁 2.基于Redis的分布式锁; 3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis...

大海201506
今天
0
0
ClassNotFoundException: javax.el.ELManager

这个是因为tomcat7中的el-api2.2,有些版本太低,建议升级tomcat到8.0,利用el-api3.0就会解决这个问题。

无语年华
今天
0
0
Jvm堆内存的划分结构和优化,垃圾回收详解(详细解答篇)

在JVM中堆空间划分如下图所示 上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条 1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代 2.新生代可以划分为三个区,Eden区,两个幸...

嘻哈开发者
今天
1
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中,变量的可以修改...

qimh
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部