如何设置消息TTL(不是队列)从
- Exchange(交换发送到多个队列)
- 消息(发布消息时)
- Queue(在Queue本身上,但这是Message TTL而不是Queue TTL)
我正在运行RabbitMQ 3。x、Symfony 2.1。
我试过了:
- 当我从RabbitMQ Admin UI中创建队列时设置消息TTL
我将消息属性设置为'x-message-ttl' => 3600000
。在RabbitMQ配置中,它看起来像这样:
{
"name": "blah_queue",
"vhost": "foobar",
"durable": true,
"auto_delete": false,
"arguments": {
'x-message-ttl' => 3600000
}
},
这是我得到的错误:
PRECONDITION_FAILED - inequivalent arg 'x-message-ttl'for queue
我尝试在配置中设置。yml (symfony/https://github.com/videlalvaro/RabbitMqBundle/README)
这给出了bundle使用的AMQP库的一堆错误。
我尝试修改AMQP库本身,以允许x-message-ttl
消息属性,我得到一个异常Error sending data
。
是否有人使用RabbitMQBundle设置消息TTL ?
queue_options: {name: 'blah_queue', arguments: {'x-message-ttl' => 3600000}}
queue_options: {name: 'blah_queue', arguments: {'x-message-ttl' : ['I', '3600000']}}
我可以像这样从rabbitmq管理控制台设置队列消息时间:
-
我在Fedora Linux上使用RabbitMQ 3.1.5,在浏览器中访问这个:
http://your_rabbitmq_server.com: 15672
-
点击"队列"选项卡并向下滚动到显示"添加新队列"的地方
-
在子句:"Add a new queue"下,填写以下文本框:
Virtual host: / Name: myqueue1 Durability: Durable Auto delete: No Message TTL: Auto expire: Max length: Dead letter exchange: Dead letter routing key: Argument key = x-message-ttl Argument value = 3600000 Argument datatype = number
-
点击OK保存
现在我可以从队列中消费,消息仍然会在指定的时间内存在。