美文网首页
RabbitMQ 死信队列 定时队列 延时队列

RabbitMQ 死信队列 定时队列 延时队列

作者: 風暴之灵 | 来源:发表于2019-11-12 15:54 被阅读0次

    死信队列(DLX) 

    Dead-Letter-Exchange 

    利用DLX, 当消息在一个队列中变成死信(dead message)之后, 它能被重新publish到另一个Exchange, 这个Exchange就是DLX 

    DLX也是一个正常的Exchange, 和一般的Exchange没有区别, 它能在任何队列上被指定, 实际上就是设置某个队列的属性为死信队列 

    当这个队列中有死信时, RabbitMQ就会自动将这个消息重新发布到设置的Exchange上去, 进而被路由到另一个队列 可以监听这个队列中消息做相应的处理, 这个特性可以弥补RabbitMQ3.0以前支持的immediate参数的功能 

    消息进入死信队列的三种情况:

    消息被拒绝 (basic.reject or basic.nack) 且带 requeue=false 参数

    消息的TTL-存活时间已经过期

    队列长度限制被超越(队列满)

    死信队列的设置

    首先要设置死信队列的exchange和queue, 然后进行绑定

        1. Exchange : dlx.exchange 

        2. Queue : dlx.queue

        3. RoutingKey : #

    然后正常声明交换机, 队列, 绑定, 只不过需要在队列加上一个扩展参数即可 : arguments.put(“x-dead-letter-exchange”, “dlx.exchange”);

    死信队列解决的问题:

    1. 列信息因消费不及时大量积压,消费方服务先处理不及时会影响到队列的生产者,进而会影响到所有消费此topic的队列

    2. 队列的消息超时后消失,生产者和消费者完全无感知,只能靠查落地存储的历史记录,很不方便同时业务无法再消费处理

    延时队列实现方式:

    增加延时队列,通过dead-letter方式实现超过有效期后进入可以被消费的队列中,让消费者处理

    定时队列实现方式:

    计算倒计时,再放入延时队列让消费者处理

    消息总线实现:

    可接受队列,延时等待队列,死信队列分别加上特定的前缀

    然后通过元注解参数来区分生产者发送的队列类型

    在注解监听器监听参数,如果是延时队列发送给延时等待队列,普通队列发送给可接受队列

    所有消费者统一消费可接受队列

    相关文章

      网友评论

          本文标题:RabbitMQ 死信队列 定时队列 延时队列

          本文链接:https://www.haomeiwen.com/subject/eaxqictx.html