2013-01-16 19 views
5

Come posso impostare il messaggio TTL (non la coda) sia dalSet Messaggio TTL ad una RabbitMQ un'ora

  • Exchange (Lo scambio manda a più code)
  • messaggio (durante la pubblicazione del messaggio)
  • coda (sulla coda stessa, ma ancora una volta questo è il messaggio TTL e non TTL coda)

io corro 3.x RabbitMQ, Symfony 2.1.x e il RabbitMqBundle.

Quello che ho provato:

  • Impostazione della TTL Messaggio quando faccio la stessa coda dal RabbitMQ Admin UI

ho impostato le proprietà del messaggio per 'x-message-ttl' => 3600000. Nel RabbitMQ config sembra che questo:

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

questo è l'errore che ottengo:

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

ho provato a fissare nel config.yml (symfony/https://github.com/videlalvaro/RabbitMqBundle/README)

questo dà un sacco di errori con la libreria AMQP utilizzata dal bundle.

Ho provato a modificare la libreria AMQP stessa per consentire le proprietà del messaggio x-message-ttl e ottengo un'eccezione Error sending data.

Qualcuno ha impostato il messaggio TTL utilizzando RabbitMQBundle?

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

Credo che si voglia fare qualcosa del genere: 'argomenti: {'x-message-ttl': ['I', 3600000]} 'guarda [questo file di test] (https: // github.com/romainneutron/php-amqplib/blob/9165f99461c3455ddc93916ad0821e99b0d19c43/demo/queue_arguments.php) per la libreria menzognera –

risposta

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

Scusa che era una delle opzioni che ho provato già, non ha funzionato –

+1

Questo funziona correttamente con Rabbit 2.8 e le ultime versioni di RabbitMQBundle e php-ampqlib. Non ho provato con le versioni 3.x di Rabbit, ma forse l'opzione è cambiata? –

+0

Inoltre, è necessario eliminare la coda prima di eseguire un consumatore/produttore. Non è possibile aggiungere questo argomento a una coda che non lo ha già. –

0

posso impostare il tempo di messaggio della coda di vivere dalla console di gestione RabbitMQ come questo:

  1. sto usando RabbitMQ 3.1.5 su Fedora Linux, visitare questo nel browser:

    http://your_rabbitmq_server.com:15672

  2. Fare clic sulla scheda "Code" e scorrere verso il basso per cui si dice: "Aggiungere una nuova coda"

  3. Sotto la sottosezione: "Aggiungere una nuova coda", compilare queste caselle di testo:

    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. Fare clic su OK per salvarlo.

Ora ho potuto consumare dalla coda e il messaggio sarà ancora lì per il tempo specificato.

Problemi correlati