RabbitMQ 死信/死信队列
一、RabbitMQ 死信/死信队列
1、DLX
Dead Letter Exchange 的缩写
DLX(Dead Letter Exchanges)死信交换,死信队列本身也是一个普通的消息队列,在创建队列的时候,通过设置一些关键参数,可以将一个普通的消息队列设置为死信队列,与其它消息队列不同的是,其入栈的消息根据入栈时指定的过期时间/被拒绝/超出队列长度被移除,依次被转发到指定的消息队列中进行二次处理。这样说法比较拗口,其原理就是死信队列内位于顶部的消息过期时,该消息将被马上发送到另外一个订阅者(消息队列)中
2、什么是死信
消息被拒绝(basic.reject或basic.nack)并且requeue=false.
消息TTL过期
队列达到最大长度(队列满了,无法再添加数据到mq中)
3、什么是死信交换机
在定义业务队列的时候,要考虑指定一个死信交换机,死信交换机可以和任何一个普通的队列进行绑定,然后在业务队列出现死信的时候就会将数据发送到死信队列。
4、什么是死信队列
死信队列实际上就是一个普通的队列,只是这个队列跟死信交换机进行了绑定,用来存放死信而已
如何使用死信交换机
定义业务(普通)队列的时候指定参数
x-dead-letter-exchange: 用来设置死信后发送的交换机
x-dead-letter-routing-key:用来设置死信的routingKey
死信交换机图解
生产者:
(1)生产者连接到RabbitMQ Broker,建立一个连接( Connection)开启一个信道(Channel)
(2)生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等
(3)生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等
(4)生产者通过路由键将交换器和队列绑定起来
(5)生产者发送消息至RabbitMQ Broker,其中包含路由键、交换器等信息。
(6)相应的交换器根据接收到的路由键查找相匹配的队列。
(7)如果找到,则将从生产者发送过来的消息存入相应的队列中。
(8)如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
(9)关闭信道。
(10)关闭连接。
消费者:
(1)消费者连接到RabbitMQ Broker ,建立一个连接(Connection),开启一个信道(Channel) 。
(2)消费者向RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,
(3)等待RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息。
(4)消费者确认(ack) 接收到的消息。
(5)RabbitMQ 从队列中删除相应己经被确认的消息。
(6)关闭信道。
(7)关闭连接。
RabbitMQ 死信/死信队列相关推荐
- RabbitMq(五) -- 死信队列和延迟队列
1. 死信 1.1 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到 queue ...
- (12)RabbitMQ的TTL(消息有效期)和DLX(死信交换机/队列)
本节继续介绍RabbitMQ的高级特性:TTL(Time-To-Live消息有效期)和DLX(Dead-Letter-Exchange死信交换机.死信队列) RabbitMQ的TTL 1.TTL概述 ...
- RabbitMQ:死信队列
✨ RabbitMQ:死信队列 1.死信队列 1.1死信队列基本介绍 1.2消息成为死信的三种情况 1.3死信队列结构图 1.4死信的处理方式 2.TTL消息过期时间 2.1基本介绍 2.2生产者 2 ...
- rabbitMQ学习-死信队列
死信队列 死信:顾名思义就是无法被消费的消息,一般情况下,product将消息投递到broker或者直接到queue里,consumer从queue取出消息,进行消费,但某些时候由于特定的原因导致qu ...
- RabbitMQ 之死信队列
文章目录 什么是死信队列 如何配置死信队列 死信消息的变化 死信队列应用场景 总结 什么是死信队列 为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将 ...
- RabbitMq(十一) 死信交换机DLX介绍及使用
概述: 死信交换机(DLX dead-letter-exchange)和普通交换机一样,也是一种普通的交换机,只不过一般交换机处理正常的消息,而死信交换机是接收被删除的消息.绑定到死信 ...
- SpringBoot之使用RabbitMQ实现延迟队列
在我们的各个项目中,经常会有这样的需求. 订单模块:在订单下单后30分钟如果没有付款,就自动取消订单, 短信模块:在下单成功后60s给用户发送短信通知 支付模块:在微信/支付宝支付成功后,1分钟后去调 ...
- RabbitMQ自学之路(九)——RabbitMQ实现延时队列的两种方式
一.什么是延时队列 延时队列顾名思义,即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费. 二.延时队列应用于什么场景 场景一:在订单系统中,一个用户下单之后通常有30分钟的时间 ...
- RabbitMQ 的延时队列和镜像队列原理与实战
在阿里云栖开发者沙龙PHP技术专场上,掌阅资深后端工程师.掘金小测<Redis深度历险>作者钱文品为大家介绍了RabbitMQ的延时队列和镜像队列的原理与实践,重点比较了RabbitMQ提 ...
最新文章
- c#chart背景透明_C# 二
- 删除aux.txt.. 这样的文件夹方法
- 31 多线程同步之Lock(互斥锁)
- chartcontrol饼状图属性设置_温故而知新,ggplot2 饼图的几点笔记
- Gson 使用总结 高级用法
- 分布式系统概述(来自学习资料)
- .Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析
- linux教程 sed命令的用法,Linux基础教程之文件三剑客sed命令用法详解
- 苹果AirPods Max拼多多百亿补贴价来了:券后价3999元
- win8.1远程桌面连接2008显示正在加密远程连接
- [转]Java集合类: Set、List、Map、Queue使用场景梳理
- SQL优化常用方法51
- 金字塔 2020-12-29
- 怎么理解java面向对象
- SAS计算IV代码分享
- unity 地图画格_unity开发之3d网格地图(一)
- Java中的数组注意点
- abbyyfinereader软件下载中文注册免安装激活版
- 中英文之间的空格处理
- vue2.0引入antd
热门文章
- [导入]心平气和,千佳骈集;意粗性躁,一事无成
- Kinect开发笔记之八C#实现Kinect声音的追踪
- 撬锁锤怎么用_安全锤是啥?消防蜀黍教你怎么选?如何快速破拆逃生?
- 新手AS常见问题集锦
- CML更新 | 新增百度小程序、支付宝小程序
- 编译安装Centos7.2+Apache2.4.25+PHP7.2.10+Mysql5.6.16
- 如何恢复master数据库
- java jar包收集
- ext 浅谈类的实例
- HTTP header中的 Cache-control