这篇文章将为大家详细讲解有关rabbitMq中延时机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一: TTL机制
TTL机制其实就是给队列 或者 消息设置过期时间,因为中间件的容量和堆积能力有限,有一些消息长时间消费不了,可使用过期来删除。 用法如下:
-
通过Queue属性设置,队列中所有消息都有相同的过期时间-单位毫秒。
-
对消息自身进行单独设置,每条消息的TTL 可以不同。
**二:死信队列 **
死信队列用来存放普通队列中不能正常消费的消息,如超时的,拒绝的,返回nack的等…
普通队列绑定了死信交换机就是死信队列; 而死信交换机也是普通交换机,只是在别的队列声明属性中,有个属性叫做:x-dead-letter-exchange,它的value指定的交换机,就成了死信交换机。 具体如图示:
当消息过期后,就会根据指定的routingKey发送到交换机,最终根据绑定key路由到死信队列。
三:应用场景
明白以上的TTL和死信队列后,我们可以做什么呢? 比如,电商系统,用户下了一个订单后需要支付,支付时间为15分钟,超时后将订单的未支付改为已取消,该怎么做呢?
做法一: 使用定时任务不断去扫描数据库中未支付的订单,看创建时间和当前时间是否大于15分钟,如果是改为已取消。
问题来了: 如果订单表数据量很大,频繁扫描会带来性能问题。 如果不够频繁,误差又会很大,不能及时更新状态。
做法二: 比如TTL和死信队列,生成订单后往mq发送一条消息(不去消费它),设置15钟过期,15分钟后发送到死信队列,监听死信队列的消费端拿到消息后,去查询订单,如果还是未支付,则改为已取消。
四:延迟队列
延迟队列其实就是TTL和死信队列的变相,只不过上面是把消息存在队列里实现过期,延迟队列是基于插件rabbitmq_delayed_message_exchange,把消息先发到x-delayed-message exchange延时交换机,到时间后再发送到队列。
此插件需要去下载,用法这里不作描述了。
关于“rabbitMq中延时机制的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/240186.html