5

AMQP函数consume()是一个带有回调的阻塞函数,是否可以为consume()函数设置超时,所以在特定时间后它不再阻塞并且代码执行完成?

4

1 回答 1

6

是的,方法如下:

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

然后,当您在队列上调用consume() 时,如果在超时期限内没有消息到达,则会从consume() 抛出AMQPException 并显示消息“资源暂时不可用”。如果您曾经中断消费()或遇到超时,请务必在队列对象上调用取消()以正确重置消费者。为此,您需要生成一个全局唯一的消费者标签,并将其作为未记录的第三个参数传入以进行消费:

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

这样,您以后可以再次调用 consume() ,而不会出现让您头晕目眩的奇怪问题。

于 2013-07-13T01:49:23.970 回答