RabbitMQ: отмена срока действия очереди при отправке

RabbitMQ поддерживает время истечения для очередей (или очередей TTL).
Как объяснено в документации RabbitMQ, Время истечения может быть довольно легко установить для данной очереди, установив x-expires аргумент queue_declare метод.
Для отправки сообщений я объявляю очередь, а затем отправляю сообщения, используя basic_publish метод.
Однако мой отправляющий код «касается» истечения очереди — когда сообщение отправляется, время истечения сбрасывается до его первоначального значения (в моем примере 30 секунд).

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

$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-секундный таймер не будет сброшен.

Спасибо!

1

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …