不积跬步,无以至千里;不积小流,无以成江海。

RabbitMQ给每一个消息设置过期时间,不能及时删除

RabbitMQ可以对消息和队列设置TTL. 目前有两种方法可以设置。

第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。

第二种方法是对消息进行单独设置,每条消息TTL可以不同。如果上述两种方法同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准。

消息在队列的生存时间一旦超过设置的TTL值,就称为dead message, 消费者将无法再收到该消息。

 

对于第一种设置队列TTL属性的方法,一旦消息过期,就会从队列中抹去(及时性)

而第二种方法为每个消息设置不同过期时间,即使消息过期,也不一定会马上从队列中抹去(死信转发时,不能够及时转发,不靠谱)

因为每条消息是否过期时在即将投递到消费者之前判定的,为什么两者得处理方法不一致?

因为第一种方法里,队列中已过期的消息肯定在队列头部,RabbitMQ只要定期从队头开始扫描是否有过期消息即可,

而第二种方法里,每条消息的过期时间不同,如果要删除所有过期消息,势必要扫描整个队列,所以不如等到此消息即将被消费时再判定是否过期,如果过期,再进行删除。

赞(5)
未经允许不得转载:技术栈 » RabbitMQ给每一个消息设置过期时间,不能及时删除
分享到: 更多 (0)

评论 抢沙发