知识卡片

队列级与消息级TTL为何清理策略不同

专业/工作 · 592.a

内容

消息的存活时间可以通过队列属性统一设置,也可以对单条消息单独设置,两者同时使用则取较小值生效。但两种设置的过期清理时机不同:队列级TTL下,已过期消息必然在队头,RabbitMQ只需定期扫描队头即可高效清除;消息级TTL下每条消息的过期时间可能各不相同,若要主动清理就得扫描整个队列,所以RabbitMQ选择只在消息即将被投递给消费者之前才判断是否已过期。发散:当”批量统一处理”和”逐项按需处理”两种场景混在一个特性里时,实现往往会为每种场景挑选各自代价最低的时机,而不是用同一套逻辑覆盖所有情况。

参考来源

《RabbitMQ实战指南》第4章《RabbitMQ进阶》