Функция AMQP consume () – это функция блокировки с обратным вызовом, возможно ли установить тайм-аут для функции потребления (), поэтому через определенное время он больше не блокируется и выполнение кода завершается?
Да, вот как:
$amqp = new AMQPConnection($your_connection_params); $amqp->setTimeout($seconds);
Затем, когда вы вызываете consume () в очередь, если сообщения не поступают в течение периода ожидания, AMQPException будет выведен из consume () с сообщением «Ресурс временно недоступен». Если вы когда-либо выходите из потребления () или набираете тайм-аут, обязательно вызывайте cancel () в объекте очереди, чтобы правильно сбросить потребитель. Для этого вам нужно создать глобально уникальный потребительский тег и передать его в качестве недокументированного третьего параметра для потребления:
$tag = uniqid() . microtime(true); $queue->consume($callback, $flags, $tag); $queue->cancel($tag);
Таким образом, вы можете снова вызвать consume () позже без каких-либо странных проблем, которые заставят вашу голову вращаться.