amqp function consume()是带有回调的阻塞函数,
是否可以为consume()函数设置超时,以便在指定的时间段后它不再阻塞并且代码执行完成?
最佳答案
是的,这里是如何:
$amqp = new AMQPConnection($your_connection_params);
$amqp->setTimeout($seconds);
然后在队列上调用consume()时,如果在超时时间内没有消息到达,则consume()将抛出一个amqpexception,并显示消息“resource temporary unavailable”。如果突破consume()或超时,请确保对queue对象调用cancel()以正确重置consumer。为此,您需要生成一个全局唯一的使用者标记,并将其作为未记录的第三个要使用的参数传入:
$tag = uniqid() . microtime(true);
$queue->consume($callback, $flags, $tag);
$queue->cancel($tag);
这样,您可以稍后再次调用consume(),而不会出现让您头晕的奇怪问题。