RabbitMQ可以对消息和队列设置TTL. 目前有两种方法可以设置。
第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。
第二种方法是对消息进行单独设置,每条消息TTL可以不同。如果上述两种方法同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准。
消息在队列的生存时间一旦超过设置的TTL值,就称为dead message, 消费者将无法再收到该消息。
对于第一种设置队列TTL属性的方法,一旦消息过期,就会从队列中抹去(及时性)
而第二种方法为每个消息设置不同过期时间,即使消息过期,也不一定会马上从队列中抹去(死信转发时,不能够及时转发,不靠谱)
因为每条消息是否过期时在即将投递到消费者之前判定的,为什么两者得处理方法不一致?
因为第一种方法里,队列中已过期的消息肯定在队列头部,RabbitMQ只要定期从队头开始扫描是否有过期消息即可,
而第二种方法里,每条消息的过期时间不同,如果要删除所有过期消息,势必要扫描整个队列,所以不如等到此消息即将被消费时再判定是否过期,如果过期,再进行删除。
最新评论
5211314
能不能教我 一点不会