RabbitMQ高可用系列之消费失败处理-死信

RabbitMQ死信队列应用 目录 1、什么是死信队列 2、死信队列应用场景 3、延迟消息概念 3.1 消息的TTL(Time To Live) 3.2 死信交换器 3.3 延时队列 4、死信队列使用流程图 5、死信队列应用(管理控制台) 6、死信队列应用(Java代码) 6.1 RabbitMQ原生API 6.2 SpringBoot集成RabbitMQ 1、什么是死信队列 DLX, Dead-Letter-Exchange。利用DLX, 当消息在一个队列中因为业务队列处理失败(比如抛异常并且达到了re. 阅读详情

摘要: RabbitMQ高可用系列之消费失败处理-死信

DLX

Dead Letter Exchange 的缩写
DLX也叫死信邮箱(网上的译法),死信交换机(字面翻译)。归根结底就是一个交换机,当队列中出现死信时,通过这个交换机将死信重新发送到死信队列中(指定好rabbitmq会自动发送)。

什么是死信

什么是死信呢?官方给出三个说法:

消息被拒绝(basic.reject或basic.nack)并且requeue=false.
消息TTL过期
队列达到最大长度(队列满了,无法再添加数据到mq中)

什么是死信交换机

在定义业务队列的时候,要考虑指定一个死信交换机,死信交换机可以和任何一个普通的队列进行绑定,然后在业务队列出现死信的时候就会将数据发送到死信队列。

什么是死信队列

死信队列实际上就是一个普通的队列,只是这个队列跟死信交换机进行了绑定,用来存放死信而已。

如何使用死信交换机

定义业务(普通)队列的时候指定参数

x-dead-letter-exchange: 用来设置死信后发送的交换机
x-dead-letter-routing-key:用来设置死信的routingKey

死信交换机图解
这里写图片描述

创建业务队列

@Bean
public Queue mailQueue() {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("x-dead-letter-exchange", "dead_letter_exchange");//设置死信交换机
    map.put("x-dead-letter-routing-key", "mail_queue_fail");//设置死信routingKey
    Queue queue = new Queue("mailQueue",true, false, false, map);
    return queue;
}

创建业务交换机

@Bean
public DirectExchange mailExchange() {
    return new DirectExchange("mailExchange", true, false);
}

绑定业务队列和交换机,指定routingKey

@Bean
public Binding mailBinding() {
    return BindingBuilder.bind(mailQueue()).to(mailExchange())
            .with(mailRoutingKey);
}

创建死信交换机

@Bean
public DirectExchange deadLetterExchange() {
return new DirectExchange("dead_letter_exchange", true, false);
}

创建死信队列

@Bean
public Queue deadQueue(){
    Queue queue = new Queue("dead", true);
    return queue;
}

绑定死信队列和死信交换机

@Bean
public Binding deadLetterBindding(){
	return BindingBuilder.bind(deadLetterQueue()).to(deadLetterExchange()).with("mail_queue_fail");
}

##查看创建后的队列和exchange
开始打算定义一个mailErrorQueue来记录消费失败的消息的,后来感觉不是特别方便,用RabbitMQ自带的死信邮件机制更好一些。 DLX即死信交换机,DLK即死信路由键(routingKey)

这里写图片描述
##测试数据进入死信队列
客户端设置拒绝消费和不确认消费
当我们消费的时候通过使用basic.reject和basic.nack即可,我这里使用的是reject。

channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);

原文转载:https://my.oschina.net/huaxian8812/blog/780086

halcon知识:常见三种模板匹配方法总结 halcon的三种模板匹配方法总结,halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。 先要补充点知识:形状匹配常见的有四种情况 一般形状匹配模板shape_model、线性变 阅读详情

相关推荐

Notion卡顿救星:3分钟搞定DNS优化,手机电脑全平台加速指南

本文针对Notion访问慢和卡顿问题,提供了全平台DNS优化与Hosts文件修改的详细指南。通过更换优质DNS服务器或建立静态IP映射,可有效解决因网络延迟和域名解析导致的加载缓慢,实现手机与电脑端的快速加速,提升Notion使用流畅度。

v6b7n8m9q0的博客 1306

RabbitMQ 死信/死信队列

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34128839的博客 788

IIC协议常见误区解析:从时序图到实际波形(附逻辑分析仪实测)

本文深入解析IIC协议在实际应用中的常见误区,从理想时序图到逻辑分析仪实测波形的差异,揭示通信故障的根本原因。通过硬件设计优化、软件时序调优和高级调试技巧,帮助开发者有效规避IIC通信中的隐形陷阱,提升系统稳定性。

weixin_28738397的博客 370

【rabbitmq】PHP操作队列时,异常处理方法

PHP当消费者抛出异常,代表消费失败 使用nack(true)或reject(true),可以让消息重回队列(队列头),紧接着再次消费,再失败...造成死循环,队列中其他的数据也无法消费. 消费者 $callback = function(AMQPMessage $msg){ try{ //业务逻辑 throw new \Exception('消费失败'); }catch (\Exception $e) {

jiangshanghe的博客 658

sysbench测试系统内存

系统内存读写测试方法,报告解读

m0_61066945的博客 3018

Chromatix_AEC—深入解析曝光表配置与传感器参数计算

本文深入解析高通Chromatix AEC模块中的曝光表配置与传感器参数计算,详细介绍了自动曝光控制(AEC)的核心概念、首行曝光时间计算、行时间与曝光模式对比、帧率计算逻辑以及曝光表高级配置技巧。通过实战案例展示如何优化传感器参数联调,帮助开发者掌握Chromatix工具在摄像头系统中的关键应用。

266

PHP调用RabbitMQ消息中间件报错解决

由于供应商主数据的量级较大,并发数不均衡,时间短,为了实现削峰填谷,达到数据平稳入库,选用了和PHP扩展较好的mq

qq_33665793的博客 859

[AI] 本地部署 Dify 遇到 Internal Error?一文彻底解决密码不一致引发的问题

摘要:Dify本地部署常见InternalError错误主要由配置残留或密码不一致导致,特别是修改.env文件后未同步清除数据库记录。彻底解决方案包括:1)清理Docker数据;2)删除旧配置和数据库;3)还原源代码;4)重建.env文件;5)重新初始化部署。关键提醒:记录部署路径、备份.env文件并妥善保存密码。该错误本质是配置冲突,最有效方法是完全重置而非调试,保持清晰的部署管理可避免多数InternalError问题。(149字)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 432

RabbitMQ简单模式PHP发送失败

耗费了一小时才找到问题 , 我大意了没有闪啊

s1095622320的博客 365

深度学习论文: AnomalyDINO: Boosting Patch-based Few-shot Anomaly Detection with DINOv2

通过将DINOv2模型适应到一次性和少量异常检测中,并专注于工业应用少量异常检测。实验表明,这种方法不仅与现有技术相匹敌,甚至可以在许多设置中超越它们。我们提出的仅视觉方法AnomalyDINO基于补丁相似性,能够实现图像级别的异常预测和像素级别的异常分割。该方法在方法论上很简单,无需训练,因此不需要任何额外的数据进行微调或元学习。

mingo_敏 1902

HyperLynx(十八)DDR(一)DDR简介和DDR的数据仿真

LVTTL电平为单端信号,而SSTL电平本质上是差分对,其实现机制是将信号与参考电平Vref组成差分对进行比较,如图所示,VIH和VIL各有一个交流参数AC和直流参数DC,信号第一次越过AC门限的时刻,作为时序计算的参考点,此后只要信号保持DC门限内,逻辑状态保持不变,这种设计减小了噪声、振铃等对于信号质量的影响。经过调整后,控制器在发送颗粒1的DQS后,延时1ns再发送颗粒2的DQS,则颗粒1在1ns后收到对齐的DQS和CLK,颗粒2在2ns后收到对齐的DQS和CLK,从而满足了时序关系。

小幽余生不加糖 7676

rabbitmq消息异常处理

rabbitmq消息异常处理

YH950618的博客 6071

手把手带你死磕ORBSLAM3源代码(一)目录详解

ORB-SLAM3是一种基于特征点的稀疏实时单目SLAM(Simultaneous Localization and Mapping)系统。它是ORB-SLAM系列模型的第三代版本,用于在无人机、机器人和增强现实等领域中进行实时定位和建图。ORB-SLAM3使用了一种特征点提取和描述算法,称为ORB(Oriented FAST and Rotated BRIEF)。该算法能够提取图像中的稳定特征,并将其用于地图建立和相机定位。

anananajiushiwo的博客 2298

Rabbitmq消费失败死信队列

Rabbitmq 重消费处理一 处理流程图: 业务交换机:正常接收发送者,发送过来的消息,交换机类型topicAE交换机: 当业务交换机无法根据指定的routingkey去路由到队列的时候,会全部发送到AE交换机.发送到此队列的消息属于,业务垃圾消息,或者攻击消息类型,交换机类型fanout死信交换机:用于处理消费者,消费失败回退的消息,根据死信交换机的routingkey发送到死信队列,交换

曾浩 3万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java工具27-RabbitMQ:死信队列配置(处理消息消费失败场景)

本文介绍了RabbitMQ死信队列的配置与使用,详细讲解了死信队列的概念、应用场景和三种触发条件(消息被NACK、TTL过期、队列满)。通过Spring Boot代码示例,展示了如何配置主业务队列绑定死信交换器,并实现异常消息的隔离处理。文章包含完整的配置类代码,涵盖队列声明、交换器绑定等核心步骤,帮助开发者构建健壮的消息处理系统,确保关键业务数据不丢失。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

死信是什么,如何运用RabbitMQ的死信机制?

我们在上次讨论RabbitMQ的消息可靠性时,已经提到了死信队列(详见系列文章《RabbitMQ 能保证消息可靠性吗》),死信概念是RabbitMQ的重要特性,官网也有该特性的介绍,那么这种设计有什么用,我们又该怎么使用死信呢?一起开始本次的学习吧。

战斧的博客 5504

RabbitMQ的消费者处理消息失败后之重试3次,重试3次仍然失败发送到死信队列。

1、为什么要重试? 如果消费者处理消息失败后不重试,然后发送应答给rabbitmq,rabbitmq就会将队列中的消息删除,从而造成消息的丢失。所以我们要在消费者处理消息失败的时候,重试一定的次数。比如重试3次,如果重试3次之后还是失败,则把这条消息发送到死信队列。 所以我们现在要实现消息的重试,实现效果为: 首先,将消息携带routtingkey的...

cold_Blooder的博客 3万+

RabbitMQ死信队列

介绍rabbitmq死信队列,并模拟三种可能出现死信队列的场景加深理解

m0_62946761的博客 7306

SpringBoot基于RabbitMQ实现死信队列 (SpringBoot整合RabbitMQ实战篇)

消息超时的两种方式是?给队列设置ttl属性,进入队列后超过ttl时间的消息变为死信给消息设置ttl属性,队列接收到消息超过ttl时间后变为死信如何实现发送一个消息20秒后消费者才收到消息?给消息的目标队列指定死信交换机将消费者监听的队列绑定到死信交换机发送消息时给消息设置超时时间为20秒每一项技术深挖都是一个庞大的体系,学海无涯,共勉。

莫等闲 白了少年头 空悲切 2614

RabbitMQ实现消息的消费确认,死信队列、延迟重试队列

消息的消费确认实现原理: 当消费者的消息消费异常时,消息进入延迟重试队列,待超时后重新发送到重试队列指定的死信队列,死信队列重新消费信息,如果又出现死信情况,继续进入延时重试队列,依次循环,当重试超过3次后,消息进入失败队列等待相应的消费者特殊处理或人工处理。 死信队列 死信队列*中(dead letter)死信的消息来源: 消息被拒绝(basic.reject或basic.nack)并且req...

白鸿源的博客 5178

兔子的后院奇遇:深入了解RabbitMQ中的死信队列【RabbitMQ 四】

本文将引领你进入RabbitMQ的神奇世界,专注于死信队列的原理、应用和最佳实践。我们将从死信队列的概念开始,深入到其如何工作的机制,并通过生动的比喻和实际场景,帮助你理解死信队列在消息中间件中的重要作用。无论你是一名消息队列的新手还是经验丰富的开发者,这篇博客都将为你揭示RabbitMQ死信队列的奥秘。

todoitbo的博客 6033

RabbitMQ的死信队列详解及实现

死信队列概念 死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信,自然就有了死信队列; 以上是个人的通俗解释,专业术语解释的比较正规点大家可以参考,主要想搞清楚这个概念,不同的消息中间件大概都有自身对于死信或者死信队列的处理方式,下面重点要说说。 消息变成死信有以

doupengzp的博客 5629

死信队列,从死信到死信的死信

在消息系统中,消息消费失败(重试多次,超时收不到ack)是一种必然存在的异常。例如:消费者业务逻辑抛出异常,无法处理消息;消息格式不符合预期,字段缺失;某些系统服务下线、数据库不可用,导致消息积压;队列满了、新消息无法入队;在这些情况下,默认行为是将消息丢弃或者反复尝试消费(根据配置),这显然不够健壮。为了提升系统的稳定性,需要一个机制把这些失败的消息收集起来进行后续处理或报警,这就是死信队列的价值所在。

Daoxifu的博客 3240

RabbitMQ 消费失败怎么办?重试机制与死信队列

消息消费失败后,可通过NACK选择重新入队(requeue=true)或进入死信队列。无限重试会形成循环,应区分临时异常与永久异常。Spring AMQP支持有限重试,仍失败则配置DLX(死信交换机)与DLQ(死信队列)保存异常消息,避免资源耗尽。

2403_87560480的博客 586

RabbitMQ系列【10】死信队列

由于某些特定的原因导致队列中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了`死信`。

记录知识、锤炼自我 1863

RabbitMQ系列之死信交换机的使用

在我们上一期的RabbitMQ博客系列的分享中我们分享了有关RabbitMQ中交换机的使用,其中讲解到什么是交换机,以及交换机的类型。主要讲述了直连交换机、主题交换机、扇形交换机的示例使用,还有一个死信交换机的示例使用没有讲到,本期博客就针对与死信交互机详细的讲解一下。死信交换机(Dead-Letter-Exchange,简称DLX)是RabbitMQ 的一种消息机制用于处理那些无法被正常消费的消息。当消息在一个队列中满足某些条件(如过期、被拒绝等)时,这些消息会被放入死信队列中。

weixin_74352229的博客 2273

RabbitMQ 消费者消费消息失败,会一直重复发送

消息队列,SpringBoot使用AmqpTemplate开发,消费者消费消息失败,会一直重复发送,导致程序死循环。

weixin_44491927的博客 6947
上一篇: 微信登陆和支付
下一篇: 线程池ThreadPoolExecutor、Executors参数详解与源代码分析
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值