RabbitMQ消息中间件技术精讲17 高级篇十 死信队列

死信队列介绍

本文是《RabbitMQ精讲系列》中第十七:RabbitMQ消息中间件技术精讲17 高级篇十 死信队列

死信队列:DLX(dead-letter-exchange)

    当一个消息没有了消费者之后,这个队列就成了死信队列。

在RabbitMQ中,死信队列是相对于exchange的。RabbitMQ的死信队列:

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

在RabbitMQ中,消息如何变成死信的?有以下几种情况:

1:消息被拒绝

    消息被拒绝又分为:basic.reject和basic.nack两种

当是这两种情况下且设置了requeeu=false。也就是设置重回队列为false的情况

2:消息TTL过期

    在上一篇文章中,我们讲的TTL消息的时效性。当消息超过了设置的超时时间情况

3:队列达到最大长度

    同样,在上一篇中,我们讲到了在发送消息的时候,设置消息的最大上的。当发送消息的数据长度超过了设置的值之后,这种情况也成了死信队列。

在来看看rabbitmq死信队列:

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

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

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

死信队列设置:

1 :设置死信队列的exchange和queue,然后进行绑定(这是废话,任何一个队列都是这样的):

Exchange:dlx.exchange

Queue:dlx.queue

Routingkey:#

2 :然后我们进行正常的声明交换机、队列、绑定,只不过我们需要在队列加上一个参数即可。这个参数就是:arguments.put(“x-dead-letter-exchange”,”dlx.exchange”).

说明:arguments.put(“x-dad-letter-exchange”,”这里是自己定义的接收死信队列的exchange”)

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

代码这里就不截图了,已发布在git上。

本章节总结:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯哥Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值