共计 1016 个字符,预计需要花费 3 分钟才能阅读完成。
TTL 各自含意
在实现提早队列的生产者代码中,一共呈现了三个 TTL,这三个 TTL 值得探讨一下,这或者对你实现一个高可用的音讯队列有帮忙。
x-message-ttl
在创立队列时设置的音讯 TTL,示意音讯在队列中最多能存活多久(ms);Expiration
公布音讯时设置的音讯 TTL,音讯自产生后的存活工夫(ms);x-delay
由rabbitmq_delayed_message_exchange
插件提供 TTL,从交换机提早投递到队列的工夫(ms);
用例
音讯积压在本文中指以后音讯后面还有其余音讯。
用例一
x-message-ttl = 60000
Expiration = 20000
x-delay = 0
x-delay = 0 示意无 rabbitmq_delayed_message_exchange
插件烦扰下。
在音讯无积压的状况下,以后音讯将在 20s 后过期并被抛弃(抛弃指没设置死信队列状况下,下文同)。
在音讯积压的状况下,若工夫在 20s~60s 之间,尽管曾经超过了 Expiration 设置的 TTL,但以后音讯是 不会被抛弃 的。因为 RabbitMQ 仅判断队列中第一个音讯是否过期,抉择生产还是抛弃。
在音讯积压的状况下,若工夫在大于 60s,曾经 x-message-ttl 设置的 TTL,音讯 会被抛弃。x-message-ttl 示意一个音讯在本队列中最多能存活多久。
用例二
x-message-ttl = 60000
Expiration = 20000
x-delay = 10000
在音讯无积压的状况下,以后音讯将在 20s 后过期被抛弃。以后音讯的生命周期将是产生后进入交换机,期待 10s 后投递到队列,20s 后过期抛弃。
在音讯积压的状况下,以后音讯将在 20s 后过期后不肯定会被抛弃。直到音讯不积压,RabbitMQ 判断它已过期将其抛弃。
在音讯积压的状况下,以后音讯将在 10+60s 后肯定会被抛弃。队列不让音讯“待了”。
用例三
x-message-ttl = 5000
Expiration = 20000
x-delay = 10000
无论音讯是否积压,以后音讯将在 10+5s 后肯定被抛弃。以后音讯的生命周期将是产生后进入交换机,期待 10s 后投递到队列,进入队列 5s 后,队列不让音讯“待了”,音讯被抛弃。只管 Expiration 设置的 TTL 还未到,队列就是如此“王道”。
此外
x-message-ttl
和Expiration
,如果不设置示意永不过期;设置 0,须要有消费者立刻生产,否则将会被抛弃。