rabbitmq AMQP::потреблять()


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

Author: AhlyM, 2013-03-19

1 answers

Да, вот как:

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

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

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

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

 5
Author: gurumike, 2013-07-13 01:49:23