RabbitMQ:默认的x-message-ttl值是多少?

31

我在RabbitMQ文档中找不到安装时默认的x-message-ttl值。

我知道如何将其设置为所需值,但我很想知道默认值。

1个回答

55

默认情况下,代理服务器未设置x-message-ttl参数,因此您可以将默认值解释为无限。

如果您在未设置ttl的队列中发布没有ttl的消息(是的,有每条消息和每个队列ttl参数,请参见下面的注释):

  • 如果消息发布为持久性并且队列声明为持久性,则消息将在队列中保留,直到被消耗。

  • 如果消息未作为持久性消息发布或者队列未被声明为持久性,则消息将在队列中保留,直到被消耗或代理服务器重启。

TTL 注释:

当每条消息和每个队列ttl都设置时,Broker将使用最小值。例如,如果每条消息的ttl为10000(10秒),每个队列的ttl为20000(20秒),则将应用每条消息的ttl。

每条消息的TTL注释:

具有过期ttl的消息将在达到队列头之前在队列中保留。不要担心,它们将不会发送给消费者,但是它们将占用一些资源,直到达到队列头。这就是RabbitMQ队列的工作方式(它们坚持FIFO思想,有时可能会与AMQP协议的严格兼容性产生冲突)。有关更多信息,请参见Time-To-Live Extensions中的注意事项部分


3
消息在队列中的存留时间,不是直到它们“到达队列头”,而是直到它们被传递给消费者并得到确认或拒绝(不重新排队)。使用自动确认模式,这意味着“一旦它们被发送出去”。AMQP 0-9-1队列是先进先出的,但是在重新排队的情况下,它不清楚应该如何工作。RabbitMQ试图保留消息的原始顺序。 - Michael Klishin
1
当每条消息的TTL过期时,该消息将不会从队列中删除(它仍然会利用一些资源,如内存或磁盘),直到它到达队列头部。有关详细信息,请参见rabbitmq.com/ttl.html#per-message-ttl-caveats。并且通过重新排队也非常清楚,消息在未被确认之前不会从队列中删除(当使用自动确认时,它们会在代理端自动确认,而不管它们是否实际上被客户端消耗)。 - pinepain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接