rabbitmq - 铲子的每条消息 TTL 行为
问题描述
铲子
- 消费队列中的消息,
- 将每条消息重新发布到目标代理(默认情况下,使用原始交换名称和适用时的 routing_key)。
我找不到任何文档,当涉及铲子时,消息 TTL 的预期行为是什么:
用于计算 TTL 的时间是在源代理还是目标代理收到消息时开始计算的?还是仅对第一次发布有效,即在源代理处?
如果在消息到达目标代理之前过期时间已过,会发生什么情况?
解决方案
因此,我认为您在粘贴的文档中回答了问题。shovel
所做的只是将消息从一个队列移动到另一个队列,并在此过程中重新发布它们。它将保留所有原始消息属性,理论上包括 TTL 属性。
话虽这么说,我不相信这是你需要担心的事情。
- 消息 TTL 在队列收到消息时开始。重新发布消息时,时钟会在新队列上重置。
- 理想情况下,正在传输的消息
shovel
将在初始队列中花费不超过几毫秒,如果它们甚至最终到达那里(在大多数情况下,附加消费者的消息队列实际上不会将任何消息排入队列)。因此,在第一个队列中花费的时间应该很小,以至于没有关系。 - 消息生命周期应该对网络传输等有相当程度的容忍度,因此活动
shovel
与正常噪声相当。
如果您发现自己的情况是大量消息在队列中累积,然后才能被shovel
'd 处理,那么您可能需要在应用程序中处理过期问题。这样做还有其他好处和注意事项,但总体上您可以获得更细粒度的控制。
推荐阅读
- excel - 如何调整 Word 文档中的图像大小?
- python - 如何计算 Python 绘图的导数图
- jquery - 在 Twitter Typeahead 中,如果第一个数据源为空,有没有办法只显示来自第二个数据源的建议?
- git - docker 中的 Jenkins 和本地 git repo - 不注册对 Jenkinsfile 的更改
- javascript - 在单独的下拉单击事件中更新一个函数中的对象值
- c++ - 如何让旧版本的 clang 对 atomic 的默认异常规范感到满意
- ios - 如何在 iPad (SwiftUI) 上以 2/3 拆分视图显示不同的布局
- html - 为什么我设法以百分比设置 div 的大小?
- database - 寻找查询
- c# - 如何使用 C# NEST 在 ElasticSearch 中搜索数组的动态元素?