mq延时队列
1:首先要了解RabbitMQ中的TTL
TTL是什么呢?TTL是RabbitMQ中一个消息或者队列的属性,表明一条消息或者该队列中的所有消息的最大存活时间,
单位是毫秒。换句话说,如果一条消息设置了TTL属性或者进入了设置TTL属性的队列,那么这条消息如果在TTL设置的时间内没有被消费,则会成为"死信"。如果同时配置了队列的TTL和消息的TTL,那么较小的那个值将会被使用,有两种方式设置TTL。
2:两者的区别
如果设置了队列的TTL属性,那么一旦消息过期,就会被队列丢弃(如果配置了死信队列被丢到死信队列中),而第二种方式,消息即使过期,也不一定会被马上丢弃,因为消息是否过期是在即将投递到消费者之前判定的,如果当前队列有严重的消息积压情况,则已过期的消息也许还能存活较长时间;另外,还需要注意的一点是,如果不设置TTL,表示消息永远不会过期,如果将TTL设置为0,则表示除非此时可以直接投递该消息到消费者,否则该消息将会被丢弃
这里如果不借用mq插件有两种设计思路
(1)定义一个特定处理延时消息的队列,不设置队列ttl,利用MQ特性死列在消费者中实时写入功能性队列(这个方案如果MQ量大会有积压的风险,优点是节约成本)
(2)正常定义队列和对应死列,不设置队列TTL,消费者只处理对应逻辑(MQ本身不支持延时,所以为了保证消息的顺序性,单队列中的消息ttl必须相同)
本文来自博客园,作者:给香菜送点香菜,转载请注明原文链接:https://www.cnblogs.com/mingkewang/articles/17160217.html

浙公网安备 33010602011771号