AMQP function consume() - функция блокировки с обратным вызовом, Возможно ли установить тайм-аут для функции потребления(), поэтому через определенное время он больше не блокируется и выполнение кода завершено?rabbitmq AMQP :: consumume()
4
A
ответ
5
Да, вот как:
$amqp = new AMQPConnection($your_connection_params);
$amqp->setTimeout($seconds);
Затем, когда вы вызываете потреблять() в очереди, если никакие сообщения не прибывают в течение периода тайм-аута, AMQPException будет выброшен из потреблять() с сообщением , «Ресурс временно недоступен». Если вы когда-либо выходите из потребления() или набираете тайм-аут, обязательно вызывайте cancel() в объекте очереди, чтобы правильно сбросить потребитель. Для того, чтобы сделать это, вам нужно создать глобально уникальный потребительский тег и передать его в качестве недокументированных, третий параметр потреблять:
$tag = uniqid() . microtime(true);
$queue->consume($callback, $flags, $tag);
$queue->cancel($tag);
Таким образом, вы можете позвонить потреблять() еще раз позже без странных вопросов, заставит голову вращаться.
Спасибо, я попробую! – AhlyM
FYI, я использую модуль pecl amqp, версия 1.0.9. Я попробовал обновление до последней версии в последнее время, и мой код полностью сломался. Но метод, описанный выше, работает правильно с amqp-1.0.9 и rabbitmq 3.1.3. – gurumike
Иди в этот сценарий сегодня, и ваш ответ приведет меня в правильном направлении. Метод 'setTimeout' устарел в пользу' setReadTimeout'. Также убедитесь, что вы захватили исключение 'AMQPConnectionException', которое потребляет броски при тайм-ауте. Версия AMQP 1.4 – JohnP