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

死信交换机图解

  • 640?wx_fmt=png

640?wx_fmt=png




生产者:

(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)关闭连接。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值