2013-01-16 9 views
5

Jak mogę ustawić wiadomość TTL (nie Queue) albo zSet Wiadomość TTL do jednej godziny RabbitMQ

  • Exchange (Wymiana wysyła do wielu kolejek)
  • wiadomości (podczas publikowania wiadomości)
  • Queue (na samej kolejce, ale znowu jest to wiadomość TTL a nie Kolejka TTL)

biegnę RabbitMQ 3.x, Symfony 2.1.x oraz RabbitMqBundle.

Co próbowałem:

  • Ustawienie TTL wiadomość kiedy robię sama kolejka z RabbitMQ Admin UI

ustawić właściwości wiadomość do 'x-message-ttl' => 3600000. W RabbitMQ config wygląda tak:

{ 
    "name": "blah_queue", 
    "vhost": "foobar", 
    "durable": true, 
    "auto_delete": false, 
    "arguments": { 
      'x-message-ttl' => 3600000 
    } 
}, 

to błąd pojawia się:

PRECONDITION_FAILED - inequivalent arg 'x-message-ttl'for queue 

Próbowałem ustawienie w config.yml (symfony/https://github.com/videlalvaro/RabbitMqBundle/README)

ten podaje mnóstwo błędów w bibliotece AMQP, której używa pakiet.

Próbowałem zmodyfikować samą bibliotekę AMQP, aby umożliwić dostęp do właściwości komunikatu x-message-ttl i otrzymałem wyjątek Error sending data.

Czy ktoś ustawić komunikat TTL za pomocą RabbitMQBundle?

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

Wierzę, że chcesz zrobić coś takiego: 'arguments: {'x-message-ttl': ['I', 3600000]} 'spójrz na [ten plik testowy] (https: // github.com/romainneutron/php-amqplib/blob/9165f99461c3455ddc93916ad0821e99b0d19c43/demo/queue_arguments.php) dla ukrytej biblioteki –

Odpowiedz

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

Przepraszamy, że była to jedna z opcji, których już wypróbowałem, to nie zadziałało –

+1

Działa to poprawnie dla mnie z Królikem 2.8 i najnowsze wersje zarówno RabbitMQBundle, jak i php-ampqlib. Nie testowałem z wydaniami 3.x Rabbit, ale może opcja się zmieniła? –

+0

Należy również usunąć kolejkę przed uruchomieniem konsumenta/producenta. Nie można dodać tego argumentu do kolejki, która jeszcze jej nie ma. –

0

mogę ustawić czas wiadomość kolejka na żywo z konsoli zarządzania RabbitMQ jak ten:

  1. Używam RabbitMQ 3.1.5 na Fedora Linux, należy odwiedzić tę w przeglądarce:

    http://your_rabbitmq_server.com:15672

  2. wybierz zakładkę „Kolejki” i przewiń w dół do miejsca, gdzie jest napisane: „Dodaj nową kolejkę”

  3. Pod podrozdziału: „Dodaj nową kolejkę”, wypełnić te pola tekstowe:

    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. Kliknij OK, aby go zapisać.

Teraz mogę spożywać z kolejki i wiadomość będzie nadal dostępna przez określony czas.