RabbitMq:更改队列的 x-message-ttl
Posted
技术标签:
【中文标题】RabbitMq:更改队列的 x-message-ttl【英文标题】:RabbitMq: Change x-message-ttl of a queue 【发布时间】:2017-02-13 11:00:40 【问题描述】:如何使用可配置的 x-message-ttl 实现队列?
我有一个 x-message-ttl 设置为 1 分钟的队列,我想在运行时将其更改为 2 分钟。如何实现?
我已经尝试使用 x-message-ttl = 2 分钟再次声明队列,但 ttl 并没有因此而改变,也没有发布消息。
【问题讨论】:
【参考方案1】:如果您使用参数x-message-ttl
创建队列,则无法更改它,您必须删除并重新创建队列。
但您可以使用这些政策:
-
创建队列没有 ttl参数
创建策略,例如:
rabbitmqctl set_policy expiry ".*" """expires"":1800000" --apply-to queues
这样可以改变队列的TTL值
【讨论】:
它会改变所有队列...但是是否可以在特定队列中更改? @ShiladittyaChakraborty 您是否管理过如何为特定队列设置? @Leonardo 我试过 curl -i -u guest:guest -H "content-type:application/json" -XPUT -d '"auto_delete":false,"durable":true," arguments":"x-message-ttl": 3600000' localhost:15672/api/queues/vhost/queue_name 收到了 'long' 类型的值 '3600000',但 current 没有。看起来它不适用于现有的单个队列(无法更改参数)也注意到如果 set_policy,那么它出现在管理控制台的策略部分,而不是在每个队列上,与创建队列时设置的参数不同。 要为一个队列设置特定策略,您可以将正则表达式模式设置为您的队列名称(在@Gabriele 示例中,它是正则表达式字符串".*"
)。因此,如果您的队列名为 Foo,您只需将正则表达式模式设置为完全“Foo”。有关细节的更多帮助,请参阅this doc。
一件重要的事情要提。为队列设置 ttl 时,它不适用于已进入队列的消息。它仅适用于策略创建后添加的新消息。以上是关于RabbitMq:更改队列的 x-message-ttl的主要内容,如果未能解决你的问题,请参考以下文章