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