将消息TTL设置为1小时RabbitMQ

时间:2013-01-16 19:29:10

标签: php symfony rabbitmq amqp ttl

如何从

设置消息TTL(非队列)
  • Exchange(交换发送到多个队列)
  • 消息(发布消息时)
  • 队列(在队列本身,但这又是消息TTL,而不是队列TTL)

我正在运行RabbitMQ 3.x,Symfony 2.1.x和RabbitMqBundle

我尝试了什么:

  • 从RabbitMQ管理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

我尝试在config.yml中设置(symfony / https://github.com/videlalvaro/RabbitMqBundle / README)

这给捆绑使用的AMQP库带来了一堆错误。

我尝试修改AMQP库本身以允许x-message-ttl消息属性,并获得异常Error sending data

有没有人使用RabbitMQBundle设置Message TTL?

queue_options:    {name: 'blah_queue', arguments: {'x-message-ttl' => 3600000}}

2 个答案:

答案 0 :(得分:1)

queue_options:    {name: 'blah_queue', arguments: {'x-message-ttl' : ['I', '3600000']}}

答案 1 :(得分:0)

我可以像RabbitMq管理控制台那样设置队列消息的生存时间:

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

    http://your_rabbitmq_server.com:15672

  2. 点击“队列”标签,然后向下滚动到“添加新队列”

  3. 的位置
  4. 在小节:“添加新队列”下,填写以下文本框:

    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
    
  5. 单击“确定”保存。

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