1

铲子

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

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

  • 用于计算 TTL 的时间是在源代理还是目标代理收到消息时开始计算的?还是仅对第一次发布有效,即在源代理处?

  • 如果在消息到达目标代理之前过期时间已过,会发生什么情况?

4

1 回答 1

1

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

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

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

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

于 2018-08-28T18:01:14.063 回答