RabbitMQ 死信队列 DLX配置 延迟队列实现

本文介绍了RabbitMQ中死信队列(DLX)的概念,包括消息变为死信的条件,以及死信队列的运行机制。通过设置DLX,可以实现延迟队列的功能,即消息在特定时间后才被消费者消费。详细阐述了如何配置DLX和创建延迟队列,以及延迟队列的工作流程。
摘要由CSDN通过智能技术生成

先明白几个概念:

  • 死信
    消息如何变成死信:
    1.消息被拒绝(Basic.Reject/Basic.Nack),并且设置requeue参数为false;
    2.消息过期;
    3.队列达到最大长度。

  • 死信邮箱DLX
    当消息在一个队列中变成死信之后,它可以被重新被发送到另一个交换器中,这个交换器就是DLX ,绑定DLX 的队列就称之为死信队列。

  • 死信队列:
    1.当某个队列(非死信队列)中存在死信时
    2.RabbitMQ 就会自动地将这个消息重新发布到设置的DLX上去
    3.进而被路由到另一个队列,即死信队列

死信队列的运行图;消息最后会被绑定在死信队列的消费者消费;生产者发送一条消息,然后经过普通交换器存储到消息队列中。没有消费者去消费,导致消息过期。设置了DLX后,消息被丢给死信邮箱中,最后被路由到跟死信邮箱绑定的死信队列中
在这里插入图片描述
死信队列的实现:

  1. 创建一个死信路由器DLX.创建时可以为这个DLX 指定路由键,则死信邮箱内的死信路由键则更改。如果没有特殊指定,则使用原队列的路由键;
  2. 创建一个死信队列,绑定死信邮箱.
  3. 在声明消息队列时候方,设置x-dead-letter-exchange 参数,为这个队列添加死信队列

实现:
在这里插入图片描述

public class Send {
   
    //队列名
    private final static String QUEUE_NAME = "queue";
    //死信队列名
    private final static String DLX_QUEUE_NAME = "dlx_queue";
    //路由器名
    private final static String EXCHANGE_NAME = "exchange";
    //死信路由器名
    private final static String DLX_EXCHANGE_NAME = "dlx_exchange";
    //绑定键
    private final static String BINDING_KEY = "exchange";
    //路由键
    private final static String
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值