AMQP函数consume()是一个带回调的阻塞函数,是否可以为consume()函数设置超时时间,以便在特定时间后不再阻塞,并完成代码执行?
是这样的:
$amqp = new AMQPConnection($your_connection_params);
$amqp->setTimeout($seconds);
当您在队列上调用consume()时,如果在超时时间内没有消息到达,则会从consume()中抛出一个AMQPException异常,其中包含消息“Resource temporarily unavailable”。如果您曾经退出consume()或遇到超时,请确保在队列对象上调用cancel()以正确重置消费者。为了做到这一点,您需要生成一个全局唯一的消费者标签,并将其作为未记录的第三个参数传递给consume:
$tag = uniqid() . microtime(true);
$queue->consume($callback, $flags, $tag);
$queue->cancel($tag);
setTimeout
方法已被弃用,应使用setReadTimeout
方法。此外,请确保捕获consume
在超时时抛出的AMQPConnectionException
异常。AMQP版本1.4。 - JohnP