首页 > 解决方案 > 铲子的每条消息 TTL 行为

问题描述

铲子

  • 消费队列中的消息,
  • 将每条消息重新发布到目标代理(默认情况下,使用原始交换名称和适用时的 routing_key)。

我找不到任何文档,当涉及铲子时,消息 TTL 的预期行为是什么:

标签: rabbitmqttlrabbitmq-shovel

解决方案


因此,我认为您在粘贴的文档中回答了问题。shovel所做的只是将消息从一个队列移动到另一个队列,并在此过程中重新发布它们。它将保留所有原始消息属性,理论上包括 TTL 属性。

话虽这么说,我不相信这是你需要担心的事情。

  1. 消息 TTL 在队列收到消息时开始。重新发布消息时,时钟会在新队列上重置。
  2. 理想情况下,正在传输的消息shovel将在初始队列中花费不超过几毫秒,如果它们甚至最终到达那里(在大多数情况下,附加消费者的消息队列实际上不会将任何消息排入队列)。因此,在第一个队列中花费的时间应该很小,以至于没有关系。
  3. 消息生命周期应该对网络传输等有相当程度的容忍度,因此活动shovel与正常噪声相当。

如果您发现自己的情况是大量消息在队列中累积,然后才能被shovel'd 处理,那么您可能需要在应用程序中处理过期问题。这样做还有其他好处和注意事项,但总体上您可以获得更细粒度的控制。


推荐阅读