RabbitMq死信交换机

  • 死信交换机

当一个队列中的消息满足下列情况之一时,可以成为死信。

    • 消费者使用basic.reject或basic.nack声明消费失败,并且消息的requeue参数设置为false
    • 消息是一个过期消息,超时无人消费
    • 要投递的队列消息堆积满了,最早的消息可能成为死信

如果该队列设置了 dead-letter-exchange属性,指定了一个交换机,那么队列中的私信就会投递到这个交换机中,而这个交换机称为死信交换机(Dead Letter Exchagne,简称DLX)

在这里插入图片描述

和消费重试失败指定交换机有点类似,只不过失败重试结束后是有由消费者重新投递到交换机。不是从队列中投递到死信交换机。

在这里插入图片描述

什么样的消息会可能成为私信

  1. 消息被消费者拒绝reject 或者 返回nack,同时不会重回队列
  2. 消息超时未消委
  3. 队列满了,早期的消息会被处理

如果死信不想被丢弃,则需要绑定死信交换机,如何给队列绑定死信交换机?

  • 给队列 设置dead-letter-exchange 属性,指定一个交换机

  • 给队列设置dead-letter-routing-key属性,设置死信交换机与死信队列的routingkey

  • TTL

TTL,也就是Time-To-Time.如果一个队列中的消息TTL 结束仍未消费,则变为死信,TTL 超时分为两种情况

  • 消息所在的队列设置了存活时间
  • 消息本身设置了存活时间

如果 消息和队列的 x-message-ttl 同时存在,则时间较短的起效。
通过下图 我们可以明白了,TTL 集合死信交换机 可以达到延迟消费的效果。

在这里插入图片描述
声明 TTL 队列和交换机
在这里插入图片描述

如何实现发送一个消息20s后消费者才收到消息

  • 给消息的目标队列指定死信交换机

  • 消费者监听与死信交换机指定的队列

  • 发送消息时给消息设置ttl为20s

  • 延迟队列

利用TTL结合死信交换机,我们实现了消息发出后,消费者延迟收到消息的效果。这种消息模式就称为延迟队列模式。
延迟队列使用场景:

  • 延迟发送短信
  • 用户下单,如果用户在15分钟内未支付,则自动取消
  • 预约工作会议,20分钟后自动通知所有参会人员

延迟队列插件

因为延迟队列的需求非常多,所以Rabbitmq 的官方也推出了一个插件,原生支持延迟队列的效果
DelayExchange插件

DelayExchange 的本质还是官方的三种交换机,只是添加了延迟功能。因此使用时只需要声明一个交换机,交换机的类型可以是任意类型,然后设定delayed属性为ture即可。

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值