rabbitmq AMQP:: потребление ()

Функция AMQP потребление () - это блокирующая функция с обратным вызовом. Можно ли установить таймаут для функции потребления (), чтобы через определенное время она больше не блокировалась и выполнение кода было завершено?

1 ответ

Решение

Да вот как:

$amqp = new AMQPConnection($your_connection_params);
$amqp->setTimeout($seconds);

Затем, когда вы вызываете потребление () в очереди, если в течение периода ожидания не поступают никакие сообщения, AMCPException будет выброшено из потребления () с сообщением "Ресурс временно недоступен". Если вы когда-либо прервите потребление () или достигните тайм-аута, обязательно вызовите метод cancel() для объекта очереди, чтобы правильно сбросить потребителя. Для этого вам нужно сгенерировать глобально уникальный потребительский тег и передать его как недокументированный третий параметр для использования:

$tag = uniqid() . microtime(true);
$queue->consume($callback, $flags, $tag);
$queue->cancel($tag);

Таким образом, вы можете позже снова вызвать потребление () без каких-либо странных проблем, которые заставят вашу голову вращаться.

Другие вопросы по тегам