一、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 死信/死信队列相关推荐

  1. RabbitMq(五) -- 死信队列和延迟队列

    1. 死信 1.1 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到 queue ...

  2. (12)RabbitMQ的TTL(消息有效期)和DLX(死信交换机/队列)

    本节继续介绍RabbitMQ的高级特性:TTL(Time-To-Live消息有效期)和DLX(Dead-Letter-Exchange死信交换机.死信队列) RabbitMQ的TTL 1.TTL概述 ...

  3. RabbitMQ:死信队列

    ✨ RabbitMQ:死信队列 1.死信队列 1.1死信队列基本介绍 1.2消息成为死信的三种情况 1.3死信队列结构图 1.4死信的处理方式 2.TTL消息过期时间 2.1基本介绍 2.2生产者 2 ...

  4. rabbitMQ学习-死信队列

    死信队列 死信:顾名思义就是无法被消费的消息,一般情况下,product将消息投递到broker或者直接到queue里,consumer从queue取出消息,进行消费,但某些时候由于特定的原因导致qu ...

  5. RabbitMQ 之死信队列

    文章目录 什么是死信队列 如何配置死信队列 死信消息的变化 死信队列应用场景 总结 什么是死信队列 为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将 ...

  6. RabbitMq(十一) 死信交换机DLX介绍及使用

    概述:         死信交换机(DLX dead-letter-exchange)和普通交换机一样,也是一种普通的交换机,只不过一般交换机处理正常的消息,而死信交换机是接收被删除的消息.绑定到死信 ...

  7. SpringBoot之使用RabbitMQ实现延迟队列

    在我们的各个项目中,经常会有这样的需求. 订单模块:在订单下单后30分钟如果没有付款,就自动取消订单, 短信模块:在下单成功后60s给用户发送短信通知 支付模块:在微信/支付宝支付成功后,1分钟后去调 ...

  8. RabbitMQ自学之路(九)——RabbitMQ实现延时队列的两种方式

    一.什么是延时队列 延时队列顾名思义,即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费. 二.延时队列应用于什么场景 场景一:在订单系统中,一个用户下单之后通常有30分钟的时间 ...

  9. RabbitMQ 的延时队列和镜像队列原理与实战

    在阿里云栖开发者沙龙PHP技术专场上,掌阅资深后端工程师.掘金小测<Redis深度历险>作者钱文品为大家介绍了RabbitMQ的延时队列和镜像队列的原理与实践,重点比较了RabbitMQ提 ...

最新文章

  1. c#chart背景透明_C# 二
  2. 删除aux.txt.. 这样的文件夹方法
  3. 31 多线程同步之Lock(互斥锁)
  4. chartcontrol饼状图属性设置_温故而知新,ggplot2 饼图的几点笔记
  5. Gson 使用总结 高级用法
  6. 分布式系统概述(来自学习资料)
  7. .Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析
  8. linux教程 sed命令的用法,Linux基础教程之文件三剑客sed命令用法详解
  9. 苹果AirPods Max拼多多百亿补贴价来了:券后价3999元
  10. win8.1远程桌面连接2008显示正在加密远程连接
  11. [转]Java集合类: Set、List、Map、Queue使用场景梳理
  12. SQL优化常用方法51
  13. 金字塔 2020-12-29
  14. 怎么理解java面向对象
  15. SAS计算IV代码分享
  16. unity 地图画格_unity开发之3d网格地图(一)
  17. Java中的数组注意点
  18. abbyyfinereader软件下载中文注册免安装激活版
  19. 中英文之间的空格处理
  20. vue2.0引入antd

热门文章

  1. [导入]心平气和,千佳骈集;意粗性躁,一事无成
  2. Kinect开发笔记之八C#实现Kinect声音的追踪
  3. 撬锁锤怎么用_安全锤是啥?消防蜀黍教你怎么选?如何快速破拆逃生?
  4. 新手AS常见问题集锦
  5. CML更新 | 新增百度小程序、支付宝小程序
  6. 编译安装Centos7.2+Apache2.4.25+PHP7.2.10+Mysql5.6.16
  7. 如何恢复master数据库
  8. java jar包收集
  9. ext 浅谈类的实例
  10. HTTP header中的 Cache-control