MQ延迟机制

延迟机制

延迟队列

  • 延迟队列——消息进入到队列之后,延迟指定的时间才能被消费者消费
  • AMQP协议和RabbitMQ队列本身是不支持延迟队列功能的,但是可以通过TTL(Time To Live)特性模拟延迟队列的功能
  • TTL就是消息的存活时间。RabbitMQ可以分别对队列和消息设置存活时间

在这里插入图片描述

  • 在创建队列的时候可以设置队列的存活时间,当消息进入到队列并且在存活时间内没有消费者消费,则此消息就会从当前队列被移除;
  • 创建消息队列没有设置TTL,但是消息设置了TTL,那么当消息的存活时间结束,也会被移除;一般设置每个消息的存活时间相等,即使不等也要保持前面消息的存活时间小于后面消息,因为队列是满足先进先出原则的消费,只有第一个消息被消费才能到第二个消息,如果后面的消息存活时间很短,等到前面消息处理完,后面的消息也被移除了,就是后面是无效消息。
  • 当TTL结束之后,我们可以指定将当前队列的消息转存到其他指定的队列

使用延迟队列实现订单支付监控

死信队列:没有消费者,但设置了消息TTL存活时间,等过期时间一到,所以消息要么转存到其他队列,要么移除。

实现流程图

在这里插入图片描述
**订单延时支付功能实现:**准备一个路由模式的交换机,一个死信队列存放消息,但是没有消费者消费它,一个queue2消息队列不存放消息,只接收死信队列转存的过期消息,有B服务消费queue2队列,这样就可以保障B服务会在30分钟后检查支付状态(因为一开始queue2没有存消息,B消费者不能消费,只有在30分钟后,死信队列转存过期消息到queue2,B才能消费)。

创建交换机和队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值