“Message TTL”设置为“1小时”


Set Message TTL to one hour RabbitMQ

如何设置消息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管理控制台设置队列消息时间:

  1. 我在Fedora Linux上使用RabbitMQ 3.1.5,在浏览器中访问这个:

    http://your_rabbitmq_server.com: 15672

  2. 点击"队列"选项卡并向下滚动到显示"添加新队列"的地方

  3. 在子句:"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
    
  4. 点击OK保存

现在我可以从队列中消费,消息仍然会在指定的时间内存在。