RabbitMQ--扩展--10--消息追踪

RabbitMQ–扩展–10–消息追踪


1、介绍

1.1、RabbitMQ 消息异常丢失的情况

  1. 可能是生产者与Broker断开了连接并且也没有任何重试机制
  2. 可能是消费者在处理消息时发生了异常,不过却提前进行了ack
  3. 可能是交换机并没有与任何队列进行绑定,生产者感知不到或者没有采取相应的措施
  4. 可能是RabbitMQ 本身的集群策略导致消息的丢失

1.2、为什么使用消息追踪

我们需要有一个良好的机制来跟踪记录消息的投递过程,以此协助开发或者运维人员快速地定位问题。

2、Firehose

2.1、介绍

在RabbitMQ 中可以使用Firehose功能来实现消息追踪,Firehose 可以记录每一次发送或者消费消息的记录,方便RabbitMQ 的使用者进行调试、排错等。

2.2、原理

Firehose 将生产者投递给RabbitMQ的消息,或者RabbitMQ 投递给消费者的消息按照指定的格式发送到一个默认的交换机上

2.2.1、默认的交换机

名称

amq.rabbitmq.trace

类型

topic

2.2.2、消息发送到交换机(amq.rabbitmq.trace)的路由键名称如下

  1. publish.{exchangename}
    1. exchangename:交换机名称
  2. deliver.{queuename}
    1. queuename:队列名称

2.3、过程

在Firehose开启状态下,当有客户端发送或者消费消息时,Firehose会自动封装相应的消息体,并添加相应的headers属性

2.3.1、发送消息

将"trace test payload"这条消息发送到交换机exchange来说,Firehore会将其封装成如下图所示的内容。
在这里插入图片描述

2.3.2、消费消息

在消费消息时(队列名称queue),会将这条消息封装成如下图所示的内容。

在这里插入图片描述

3、Firehose 命令

3.1、开启Firehose

rabbitmqctl trace on [-p vhost] 
  1. [-p vhost] 是可选参数,用来指定虚拟主机vhost。

3.2、关闭Firehose

rabbitmqctl trace off [-p vhost] 
  1. Firehose 默认状态:关闭状态
  2. Firehose 的状态是非持久化的,会在 RabbitMQ服务重启的时候还原成默认的状态。
  3. Firehose 开启之后多少会影响RabbitMQ 整体服务的性能,因为它会引起额外的消息生成、路由和存储。

4、rabbitmq_tracing 插件

  1. rabbitrnq_tracing插件 相当于Firehose的GUI版本
  2. 可以 跟踪RabbitMQ中消息的流入流出情况。
  3. 可以 对流入流出的消息进行封装, 然后将封装后的消息日志存入相应的trace文件之中。

5、环境

5.1、机器

# 在机器1执行命令
docker run -d --hostname rabbit1 --net=host --name myrabbit1 rabbitmq:3.8-management-alpine

 
#  添加用户 admin,密码 123456
docker exec myrabbit1 rabbitmqctl add_user admin 123456

# 给admin用户分配 administrator角色
docker exec myrabbit1 rabbitmqctl set_user_tags admin administrator

# 设置 分区为/,拥有对所有资源的 读写配置权限
docker exec myrabbit1 rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

5.2、安装插件

docker exec  myrabbit1 rabbitmq-plugins enable rabbitmq_tracing 

在这里插入图片描述

5.3、新建队列,交换机,和他们之间的绑定

eujian.queue
eujian.exchange
eujian.routKey

6、测试

6.1、新建2个Traces

在这里插入图片描述
在这里插入图片描述

6.2、新建2个Traces后会多出2个队列

在这里插入图片描述
在这里插入图片描述

6.3、发送消息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

内容
{
  "channel": 1,
  "connection": "<rabbit@rabbit1.1665122442.8664.0>",
  "exchange": "eujian.exchange",
  "node": "rabbit@rabbit1",
  # 消息体,是加密的内容
  "payload": "MTExMTE=",
  "properties": {
    "delivery_mode": 2,
    "headers": {}
  },
  "queue": "none",
  "routed_queues": [
    "eujian.queue"
  ],
  "routing_keys": [
    "eujian.routKey"
  ],
  "timestamp": "2022-10-07 7:32:47:529",
  "type": "published",
  "user": "admin",
  "vhost": "/"
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值