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);
Таким образом, вы можете позже снова вызвать потребление () без каких-либо странных проблем, которые заставят вашу голову вращаться.