RabbitMQ 备份交换机和死信交换机
为处理生产者生产者将消息推送到交换机中,交换机按照消息中的路由键即自身策略无法将消息投递到指定队列中造成消息丢失的问题,可以使用备份交换机。
为处理在消息队列中到达TTL的过期消息,可采用死信交换机进行消息转存。
通过上述描述可知,备份交换机和死信交换机处理的场景不同。备份交换机是处理未被路由的消息,死信交换机是处理队列中过期的消息。但是,它们都是为了避免消息丢失提供的一种手段。
备份交换机
生产者发送消息的过程中会指明交换机名称和路由键,RabbitMQ接收到消息后,根据交换机名称将消息投递到指定交换机中,交换机再根据自身类型以及消息携带的路由键将消息投递到队列中。当无法路由到队列时,并且该交换机存在备份交换机,则该交换机将该消息投递给其备份交换机进行处理。
备份交换机接收到消息后依旧根据其自身类型和消息路由键进行消息投递,如果依旧无法匹配到队列中,则该消息被丢失。该过程中的具体流程如下图所示。

备份交换机的实现
备份交换机的实现方式包括:生命交换机时通过参数配置和通过策略进行配置。申明交换机时配置备份交换机如下所示。
Map<String, Object> args = new HashMap<>();args.put("alternate-exchange","myAe"); channel.exchangeDeclare("normalExchange","direct",true,false,args);channel.exchangeDeclare("myAe","fanout",true,false,null);
通过上述代码即实现了声明两个交换机,其中交换机myAe是normalExchange的备份交换机。备份交换机可以理解为一个普通交换机,备份交换机自身并不知晓自己是备份交换机,当某个消息无法被路由到队列中时,该交换机会查找自己的备份交换机,如果存在则将消息交由备份交换机进行处理。
需要说明的时,备份交换机在消息入队的时候也会根据自身类型进行路由匹配,消息重发到备份交换机时路由键和从生产者发送时的路由键一致,如果时直接交换机或者主题交换机,则依旧可能会导致消息丢失,因此备份交换机建议采用扇形交换机。
备份交换机存在以下特殊情况
- 如果备份交换机和mandatory参数一起使用,则mandatory参数无效。
- 如果备份交换机不存在,则消息丢失且生产者和RabbitMQ都不会有异常出现。
- 如果备份交换机没有绑定队列,则消息丢失且生产者和RabbitMQ都不会有异常出现。
- 如果备份交换机依旧无法将消息路由到队列,则消息丢失且生产者和RabbitMQ都不会有异常出现。
死信交换机
当一个消息在一个队列中变成死信后,它能被重新发送到另一个交换机中,这个交换机就是DLX(死信交换机:Dead-Letter-Exchange),绑定DLX的队列就是死信队列。
消息变成死信一般由以下几种情况:
- 消息被消费者拒绝,并且设置不可重新入队
- 消息过期(TTL)
- 队列达到最大长度。
根据上述描述,队列中的消息变成死信后将转发给死信交换机,因此死信交换机的设置是在声明队列的过程中完成的。死信交换机和备份交换机类似,其自身并不知道自己是死信交换机,仅指定其为死信交换机的队列知道其死信交换机身份的存在,本质上死信交换机和正常交换机并不存在区别。
死信交换机的设置存在声明队列时设置和通过策略设置。声明队列时设置如下所示:
Map<String, Object> args = new HashMap<>();
// 声明该队列的死信交换机为”dlx_exchange“
args.put("x-dead-letter-exchange","dlx_exchange");
// 声明死信交由死信交换机处理时将路由键替换为dlx-routing-key
args.put("x-dead-letter-routing-key","dlx-routing-key");
channel.queueDeclare("queue",false,false,false,args);
死信交换机存在以下特殊情况
- 如果死信交换机不存在,则消息丢失且RabbitMQ都不会有异常出现。
- 如果死信交换机没有绑定队列,则消息丢失且RabbitMQ都不会有异常出现。
- 如果死信交换机依旧无法将消息路由到队列,则消息丢失且RabbitMQ都不会有异常出现。
相关文章:
RabbitMQ 备份交换机和死信交换机
为处理生产者生产者将消息推送到交换机中,交换机按照消息中的路由键即自身策略无法将消息投递到指定队列中造成消息丢失的问题,可以使用备份交换机。 为处理在消息队列中到达TTL的过期消息,可采用死信交换机进行消息转存。 通过上述描述可知&…...
Linux 中利用设备树学习Ⅳ
系列文章目录 第一章 Linux 中内核与驱动程序 第二章 Linux 设备驱动编写 (misc) 第三章 Linux 设备驱动编写及设备节点自动生成 (cdev) 第四章 Linux 平台总线platform与设备树 第五章 Linux 设备树中pinctrl与gpio(…...
使用Spring Initializr方式构建Spring Boot项目
除了可以使用Maven方式构建Spring Boot项目外,还可以通过Spring Initializr方式快速构建Spring Boot项目。从本质上说,Spring lnitializr是一个Web应用,它提供了一个基本的项目结构,能够帮助我们快速构建一个基础的Spring Boot项目…...
Sentinel 2.0 微服务零信任的探索与实践
作者:涯客、十眠 从古典朴素的安全哲学谈起 网络安全现状 现在最常见的企业网络安全架构便是在企业网络边界处做安全防护,而在企业网络内部不做安全防范。这确实为企业的安全建设省了成本也为企业提供了一定的防护能力。但是这类比于现实情况的一个小…...
Oracle以逗号分隔的字符串拆分为多行数据实例详解
前言 近期在工作中遇到某表某字段是可扩展数据内容,信息以逗号分隔生成的,现需求要根据此字段数据在其它表查询相关的内容展现出来,第一想法是切割数据,以逗号作为切割符,以下为总结的实现方法,以供大家参…...
harbor仓库安装部署(1.6.1)
目录 1、关闭防火墙 2、安装docker-ce(所有主机) 3、配置阿里云镜像加速器 4、部署Docker Compose 服务 5、部署 Harbor 服务 6、下载 Harbor 安装程序(两台harbor主机) 7、配置 Harbor 参数文件 8、启动并安装 Harbor …...
FastAPI 构建 API 高性能的 web 框架(一)
如果要部署一些大模型一般langchainfastapi,或者fastchat, 先大概了解一下fastapi,本篇主要就是贴几个实际例子。 官方文档地址: https://fastapi.tiangolo.com/zh/ 1 案例1:复旦MOSS大模型fastapi接口服务 来源:大语言模型工程…...
Spring框架中的Bean的生命周期
Spring Bean 的生命周期总体分为四个阶段:实例化 》属性注入》初始化》销毁 实例化: (1)实例化bean:根据配置文件中Bean的定义,利用java Reflection 反射技术创建Bean的实例! 属性注入&#…...
vue3-ts-vite:vue 项目 配置 多页面应用
一、Vue项目,什么是多页面应用 Vue是一种单页面应用程序(SPA)框架,这意味着Vue应用程序通常只有一个HTML页面,而在该页面上进行动态的内容更改,而不是每次都加载新的HTML页面。 但是,有时候我…...
docker部署jenkins且jenkins中使用docker去部署项目
docker部署jenkins且jenkins中使用docker去部署项目 1、确定版本 2.346.1是最后一个支持jdk8的 2、编写docker-compose.yml并执行 在这个目录中新增data文件夹,注意data是用来跟docker中的文件进行映射的 docker-compose.yml version: "3.1" service…...
无锚框原理 TOOD:Task-aligned One-stage Object Detection
无锚框原理 TOOD:Task-aligned One-stage Object Detection 一 摘要二 引言TOOD设计 三 具体设计Task-aligned Head任务对齐的预测器 TAP预测对齐 TAL 任务对齐学习Task-aligned Sample Assignment多任务损失 一 摘要 一阶段目标检测通常通过优化两个子任务来实现&…...
配置Picgo图床之COS、OSS、Github图床
简介 PicGo是一款开源的图片上传和管理工具,它提供了简单易用的界面和丰富的功能,方便用户上传、管理和分享图片。 以下是PicGo的一些主要特点和功能: 图片上传:PicGo支持将本地图片快速上传到云存储服务,如七牛云、…...
【LangChain】Prompts之自定义提示模板
LangChain学习文档 【LangChain】向量存储(Vector stores)【LangChain】向量存储之FAISS【LangChain】Prompts之Prompt templates【LangChain】Prompts之自定义提示模板 概要 假设我们希望LLM生成给定函数名称的英语解释。为了实现此任务,我们将创建一个自定义提示…...
EFLFK——ELK日志分析系统+kafka+filebeat架构(3)
zookeeperkafka分布式消息队列集群的部署 紧接上期,在ELFK的基础上,添加kafka做数据缓冲 附kafka消息队列 nginx服务器配置filebeat收集日志:192.168.116.40,修改配置将采集到的日志转发给kafka; kafka集群ÿ…...
支付总架构解析
一、支付全局分层 一笔支付以用户为起点,经过众多支付参与者之后,到达央行的清算账户,完成最终的资金清算。那么我们研究支付宏观,可以站在央行清算账户位置,俯视整个支付金字塔,如图1所示: 图…...
【HCIP】OSPF综合实验
题目: 配置: R1 //ip分配 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 172.16.0.1 27 [r1-GigabitEthernet0/0/0]q [r1]int lo [r1]int LoopBack 0 [r1-LoopBack0]ip add 172.16.1.1 24//配置缺省 [r1]ip route-static 0.0.0.0 0 172.16.0.3 //启动…...
PyTorch深度学习实战(10)——过拟合及其解决方法
PyTorch深度学习实战(10)——过拟合及其解决方法 0. 前言1. 过拟合基本概念2. 添加 Dropout 解决过拟合3. 使用正则化解决过拟合3.1 L1 正则化3.2 L2 正则化 4. 学习率衰减小结系列链接 0. 前言 过拟合 (Overfitting) 是指在机器学习中,模型…...
【工作记录】week7
day3 1.本地切换分支 本地切换分支时,可以直接用 vscode 集成的工具 点击后直接选择即可: 其中红框中为本地分支,蓝框中则是远程分支! 当在本地切换到一个本地不存在的远程分支时,会在本地创建一个同名的分支&…...
安防监控视频融合EasyCVR平台接入RTSP流后设备显示离线是什么原因?
安防监控视频EasyCVR视频汇聚融合平台基于云边端智能协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成ÿ…...
MongoDB:Linux环境全套安装指南
😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: MongoDB:Linux环境全套安装指南 ⏱️ 创作时间:…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
