2015-02-01 12 views
1

RabbitMQ поддерживает время ожидания для очередей (aka queues TTL). As explained in RabbitMQ documentation, время истечения срока действия может быть довольно легко установлено для заданной очереди, установив аргумент x-expires на метод queue_declare. Чтобы отправлять сообщения, я объявляю очередь, а затем нажимаю сообщения, используя метод basic_publish. Однако мой код отправки «затрагивает» истечение очереди - при отправке сообщения время истечения времени сбрасывается до его начального значения (30 секунд в моем примере).RabbitMQ: Отсрочка истечения очереди при отправке

Это простой пример того, как создать очередь:

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest'); 
$channel = $connection->channel(); 

// queueKey is given as first arg 
$queueName = $argv[1]; 
// auto-delete the queue after x ms 
$channel->queue_declare($queueName, false, true, false, false, false, 
    new AMQPTable(array("x-expires" => 30000)) 
); 

И это, как я отправлять сообщения:

$channel->queue_declare($queueName, true, true, false, false, false, 
    new AMQPTable(array("x-expires" => 30000))); // auto-delete the queue after x ms 

// mark messages as persistent 
$msg = new AMQPMessage($data, array(
    'delivery_mode' => 2 
)); 

// pushing the message to the queue 
$channel->basic_publish($msg, '', $queueName); 

Есть ли способ, не прикасаясь к времени истечения при отправке сообщений ? Я хочу, чтобы время истечения срока действия касалось только тогда, когда кто-то действительно потреблял сообщения (т. Е. Есть потребители), а не при отправке. Я имею в виду, когда «кто-то» отправляет сообщения, я ожидаю, что мой 30-секундный таймер не будет сброшен.

Спасибо!

ответ

0

Как вы запускаете скрипт, который публикует сообщения?

Неиспользованного означает очередь [...] не была повторно объявлен

Так что, если вы держите вызов queue_declare в вашем коде каждый раз, когда вы запускаете ваш продюсер, таймер будет сброшен.

Вы можете объявить очередь в отдельном скрипте, а затем у вашего продюсера не выдать queue_declare.

Смежные вопросы