【问题标题】:Per message TTL behavior with shovels铲子的每条消息 TTL 行为
【发布时间】:2019-02-02 12:22:26
【问题描述】:
铲子
- 使用队列中的消息,
- 将每条消息重新发布到目标代理(默认情况下,使用原始交换名称和 routing_key
适用)。
我找不到任何文档,当涉及铲子时,消息 TTL 的预期行为是什么:
【问题讨论】:
标签:
rabbitmq
ttl
rabbitmq-shovel
【解决方案1】:
所以,我认为您在粘贴的文档中回答了问题。shovel 所做的只是将消息从一个队列移动到另一个队列,并在此过程中重新发布它们。它将保留所有原始消息属性,理论上包括 TTL 属性。
话虽如此,我不认为这是你需要担心的事情。
- 消息 TTL 在队列收到消息时开始。重新发布消息后,新队列上的时钟会重置。
-
shovel 传输的消息理想情况下将在初始队列中花费不超过几毫秒,如果它们甚至最终到达那里(在大多数情况下,附加消费者的消息队列实际上不会将任何消息排入队列)。因此,在第一个队列中花费的时间应该很小,以至于没有关系。
- 消息的生命周期应该对网络传输等有相当的容忍度,所以
shovel的活动与正常的噪音相当。
如果您发现自己的情况是大量消息在队列中累积,然后才能被shovel'd,那么您可能需要在应用程序中处理过期问题。这样做还有其他好处和注意事项,但总体上您可以获得更细粒度的控制。