如果队列已经有消息的 TTL,我可以为消息提供自定义 TTL 吗?

Can I provide custom TTL for message if queue has TTL for messages already?

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

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

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

When both a per-queue and a per-message TTL are specified, the lower value between the two will be chosen.

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

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

但其他组合也可以:

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

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