消息中间件入门篇 RabbitMQ 之 死信队列详解

死信队列

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

消息变成死信有以下几种情况

  • 消息被拒绝(basic.reject / basic.nack),并且requeue = false
  • 消息TTL过期
  • 队列达到最大长度

死信处理过程

DLX也是一个正常的Exchange,和一般的Exchange没有区别,它能在任何的队列上被指定,实际上就是设置某个队列的属性。
当这个队列中有死信时,RabbitMQ就会自动的将这个消息重新发布到设置的Exchange上去,进而被路由到另一个队列。
可以监听这个队列中的消息做相应的处理。

死信队列设置

  1. 首先需要设置死信队列的exchange和queue,然后进行绑定:
    名字随便起 因为可能对应多个队列的死信 所以最好建议每个会产生死信的队列都建立一个对应的死信队列, 方便后续处理.

    • Exchange: dlx.exchange
    • Queue: dlx.queue
    • RoutingKey: # (#表示只要有消息到达了Exchange,那么都会路由到这个queue上)
  2. 然后需要有一个监听,去监听这个队列进行处理

  3. 然后我们进行正常声明交换机、队列、绑定,只不过我们需要在队列加上一个参数即可:arguments.put(" x-dead-letter-exchange","dlx.exchange");,这样消息在过期、requeue、 队列在达到最大长度时,消息就可以直接路由到死信队列!

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/107559142