rabbitMq中延时机制的示例分析

这篇文章将为大家详细讲解有关rabbitMq中延时机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一: TTL机制

TTL机制其实就是给队列 或者 消息设置过期时间,因为中间件的容量和堆积能力有限,有一些消息长时间消费不了,可使用过期来删除。 用法如下:

  1. 通过Queue属性设置,队列中所有消息都有相同的过期时间-单位毫秒。 rabbitMq中延时机制的示例分析

  2. 对消息自身进行单独设置,每条消息的TTL 可以不同。 rabbitMq中延时机制的示例分析

**二:死信队列 **

死信队列用来存放普通队列中不能正常消费的消息,如超时的,拒绝的,返回nack的等…

普通队列绑定了死信交换机就是死信队列; 而死信交换机也是普通交换机,只是在别的队列声明属性中,有个属性叫做:x-dead-letter-exchange,它的value指定的交换机,就成了死信交换机。 具体如图示: rabbitMq中延时机制的示例分析

当消息过期后,就会根据指定的routingKey发送到交换机,最终根据绑定key路由到死信队列。

三:应用场景

明白以上的TTL和死信队列后,我们可以做什么呢? 比如,电商系统,用户下了一个订单后需要支付,支付时间为15分钟,超时后将订单的未支付改为已取消,该怎么做呢?

做法一: 使用定时任务不断去扫描数据库中未支付的订单,看创建时间和当前时间是否大于15分钟,如果是改为已取消。

问题来了: 如果订单表数据量很大,频繁扫描会带来性能问题。  如果不够频繁,误差又会很大,不能及时更新状态。

做法二: 比如TTL和死信队列,生成订单后往mq发送一条消息(不去消费它),设置15钟过期,15分钟后发送到死信队列,监听死信队列的消费端拿到消息后,去查询订单,如果还是未支付,则改为已取消。

四:延迟队列

延迟队列其实就是TTL和死信队列的变相,只不过上面是把消息存在队列里实现过期,延迟队列是基于插件rabbitmq_delayed_message_exchange,把消息先发到x-delayed-message exchange延时交换机,到时间后再发送到队列。

此插件需要去下载,用法这里不作描述了。

关于“rabbitMq中延时机制的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/240186.html

(0)
上一篇 2022年2月15日
下一篇 2022年2月15日

相关推荐

发表回复

登录后才能评论