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

2023-11-09

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": "/"
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ--扩展--10--消息追踪 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 缺陷检测方法 halcon

    文章预览 前言 1 缺陷检测分类 1 1 标准缺陷检测 1 2 非标缺陷检测 针对行业特性 2 行业难点 3 常规缺陷检测算法 Halcon 3 1 差分法 3 1 1 blob分析 差分 3 1 2 模板匹配 差分 3 1 3 两种检测方
  • 前端实现在线预览pdf、word、xls、ppt等文件

    前端实现在线预览pdf word xls ppt等文件 PDF文档在线预览功能 方式一 通过a标签href属性实现 pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面 在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签h
  • windows 环境下安装Tomcat

    环境 windows 7 64位 java jdk 11 0 1 官网下载jdk tomcat9版本链接地址 https tomcat apache org download 90 cgi 因为我的电脑是win7 64位的 所以选择红色框出
  • jQuery九宫格跑马灯抽奖(已知结果)

    描述 写两个抽奖 等级不同 找到一个原生写法的 原作者链接如下 参考 https www cnblogs com yangqing22 p 14065754 html 略改了一下 换成了jQuery方式 优化点 在抽奖过程中 禁止重复点击抽
  • 因果推断-解决推荐系统公平性的新思路

    论文引入 近年来推荐系统公平性成为新的热点 在所有解决公平性问题的方法中 因果推断显得格外靓眼 我们以论文 Recommendations as treatments Debiasing learning and evaluation 1
  • Android.mk的使用以及常用模板

    Android mk使用 一个Android mk file首先必须定义好LOCAL PATH变量 它用于在开发树中查找源文件 在这个例子中 宏函数 my dir 由编译系统提供 用于返回当前路径 即包含Android mk file文件的
  • redis未授权访问getshell

    参考 https blog csdn net guxiaoguo article details 78913245 利用条件 linux 对方开启ssh 用到的工具 kali nmap redis 公司测试服务器 10 0 3 45 red
  • 解决当前标识(IIS APPPOOL\XXXX)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”...

    1 问题描述 在Windows Server2019数据中心版中搭建IIS项目 访问的时候出现如下所示的错误 当前标识 IIS APPPOOL XXXX 没有对 C Windows Microsoft NET Framework64 v4
  • 区块链入门

    区块链 区块链 区块链基础知识 区块链概念 区块链发展历史 区块链技术基础 区块链特性 区块链分类 私有链 专有链 联盟链 行业链 公有链 区块链应用领域 金融 物联网和物流 供应链 保险 公益 公共服务 数字版权 区块链核心技术 区块链技
  • uniapp用html2canvas将图片和文字部分截取 保存到本地相册

    类实现对整个或者部分页面进行截屏 效果 下载插件 引入 所有代码 效果 下载插件 官网链接 http html2canvas hertzen com 可以npm安装npm install save html2canvas或者直接去官网下载文
  • 计算机浮点数的表示与转换

    参考书籍 x86 64 Assembly Language Programming with Ubuntu
  • 2021-04-21

    python 画多列柱状图 柱状图子图 一 目的 使用matplotlib画柱状图 或在子图中画柱状图 二 方法 1 导包 import pandas as pd import numpy as np import matplotlib p
  • python multiprocessing 报错cannot pickle ‘_io.TextTOWrapper‘ object

    一 报错TypeError cannot pickle io TextTOWrapper object 在使用多进程时报错 错误信息 TypeError cannot pickle io TextTOWrapper object 1 1 原
  • c盘满了怎么办?如何快速清理内存(6个方法)

    很多用户都会问 我的电脑c盘东西太多了 c盘满了怎么办 c盘爆满 可能还会收到系统提示磁盘空间不足的警告 当出现这种情况 会导致电脑很多应用无法正常运行 运行速度也会大大降低 该如何解决这个问题 不如来看看小编精心整理的关于如何清理c盘垃圾
  • antV使用教程入门

    在移动端使用antV F2图表入门介绍 1 通过npm安装 npm install antv f2 save 成功安装完成之后 即可使用 import 或 require 进行引用 const F2 require antv f2 2 通过
  • 剑指 Offer 14- I. 剪绳子 数学法+动态规划

    剑指 Offer 14 I 剪绳子 难度 中等 题目描述 解题思路 1 数学方法 记不清在哪里好像做过这道题 在所有的分法里 每次以3为一段能得到最大的结果 比如9 分成33的时候是最大的 计算数字除以3的余数 如果余1 就和其中一个三组合
  • DETRs Beat YOLOs on Real-time Object Detection

    目录 1 模型架构 1 1高效混合编码器 1 1 1 尺度内特征交互模块AIFI 1 1 2 跨尺度特征融合CCFM 1 2IoU感知查询选择 总结 DETRs在实时目标检测中击败YOLO 问题 DETR的高计算成本 实时检测效果有待提高
  • ES6之map()方法

    map 方法 map 映射 即原数组映射成一个新的数组 map方法接受一个新参数 这个参数就是将原数组变成新数组的映射关系 function myfun 1 arr var array arr map item gt array push
  • unity2019导入leapmotion插件显示SpatialTracking在unity Engine中缺少相应的头文件

    unity2019导入leapmotion插件显示SpatialTracking在unity Engine中缺少相应的头文件 1 问题描述 2 问题解决方法 1 2 3 插入这个插件 4 问题就可以解决了 注 2019将很多插件需要自己选择
  • RabbitMQ--扩展--10--消息追踪

    RabbitMQ 扩展 10 消息追踪 1 介绍 1 1 RabbitMQ 消息异常丢失的情况 可能是生产者与Broker断开了连接并且也没有任何重试机制 可能是消费者在处理消息时发生了异常 不过却提前进行了ack 可能是交换机并没有与任何