2013-01-16 25 views
5

如何可以設置消息TTL(未隊列)從任一設置消息TTL爲一分小時的RabbitMQ

  • 交易所(交換髮送到多個隊列)
  • 消息(發佈消息時)
  • 隊列(隊列本身,但是這同樣是消息TTL而不是隊列TTL)

我跑的RabbitMQ 3.x中,Symfony的2.1.x的和RabbitMqBundle

我已經試過什麼:

  • 設置消息TTL當我提出從RabbitMQ的管理UI

隊列本身我設置了消息屬性'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設置消息TTL?

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

我相信你想要做這樣的事情:'arguments:{'x-message-ttl':['I',3600000]}'看看[這個測試文件](https:// github。com/romainneutron/php-amqplib/blob/9165f99461c3455ddc93916ad0821e99b0d19c43/demo/queue_arguments.php) –

回答

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

對不起,這是我嘗試過的選項之一,它沒有工作 –

+1

這對我來說正常工作與兔子2.8和RabbitMQBundle和php-ampqlib的最新版本。沒有測試3.x版本的兔子,但可能選項已經改變? –

+0

另外,您需要在運行使用者/生產者之前刪除隊列。您不能將此參數添加到尚未擁有它的隊列中。 –

0

我可以設置隊列消息時從RabbitMQ的管理控制檯,像這樣的生活:

  1. 我使用的RabbitMQ 3.1.5在Fedora Linux系統,請訪問此在瀏覽器中:

    http://your_rabbitmq_server.com:15672

  2. 單擊「隊列」選項卡,然後向下滾動到那裏說:「添加一個新的隊列」

  3. 下小節:「添加新的隊列」,填寫這些文本框:

    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. 點擊確定保存。

現在我可以從隊列中消耗,消息仍然會在指定的時間。