【问题标题】:Can I provide custom TTL for message if queue has TTL for messages already?如果队列已经有消息的 TTL,我可以为消息提供自定义 TTL 吗?
【发布时间】:2021-11-24 13:26:05
【问题描述】:

如果我的队列queue1 具有属性:x-message-ttl:60000,但对于此队列中的部分消息,我想要 TTL 120000 或根本没有 TTL。

TLDR:默认情况下,此队列中的所有消息都存在 1 分钟,但部分消息为 2 分钟或根本没有时间存在

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    RabbitMQ 具有单独的机制来设置每个队列和每个消息的 TTL,如 in the online manual 所述。该页面上明确提到了同时使用两者:

    当同时指定每个队列和每个消息的 TTL 时,将选择两者之间的较低值。

    因此,您的两个示例都不起作用:

    • 队列级 TTL 1 分钟 + 消息级 TTL 2 分钟 => 消息将在 1 分钟后删除
    • 队列级 TTL 为 1 分钟 + 无消息级 TTL => 消息将在 1 分钟后被删除

    但其他组合也可以:

    • 队列级 TTL 1 分钟 + 消息级 TTL 30 秒 => 消息将在 30 秒后被删除
    • 队列级 TTL 2 分钟 + 消息级 TTL 1 分钟 => 消息将在 1 分钟后删除

    这种说法是有道理的:一条消息可以在多个队列中结束,因此如果它指定 30 秒的 TTL,则它的持续时间不应超过其中任何一个;并且被告知在 30 秒后删除消息的队列并不关心单个消息设置。

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 2014-11-17
      • 2016-05-23
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2017-05-21
      相关资源
      最近更新 更多