死信队列

作者: HmilyMing | 来源:发表于2018-08-15 07:18 被阅读398次

死信队列:DLX,dead-letter-exchange

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

消息变成死信的原因有:

1.消息被拒绝(basic.reject / basic.nack)并且reQueue=false

2.消息TTL过期

3.队列达到最大长度了

dlx也是一个正常的exchange,和一般的exchange没什么区别,它能在任何队列上被指定,实际上就是设置一个属性。

当这个队列中有死信时,rabbitMQ就会自动的将这个消息重新发布到设置的exchange上去,进而被路由到另一个队列。

可以监听这个队列中消息做相应的处理,这个特性可以弥补rabbitMQ3.0以前支持的immediate参数功能。

死信队列的设置:

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

  exchange: dlx.exchange

  queue: dlx.queue

  routingkey:  #

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

这样消息在过期、reQueue、队列在达到最大长度时,消息就可以直接路由到死信队列

代码实现:代码地址:    https://github.com/hmilyos/rabbitmq-api-demo

生产端

先把消费端启动,去管控台查看test_dlx_exchange以及test_dlx_queue这两个普通的交换机、队列, 死信队列dlx.queue以及绑定的dlx.exchange是否创建成功

确认创建成功就关闭消费端,然后再启动生产端,这时候消息没被消费,一直在test_dlx_queue中,

消息还在普通队列中

直到设置的超时时间后,消息就被转发到死信队列中

消息已被转发到死信队列中

自此,死信队列的简单用法介绍完毕。

相关文章

网友评论

    本文标题:死信队列

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