rabbitmq AMQP :: consume()

Ahl*_*lyM 4 php amqp queueing rabbitmq

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

小智 5

是的,这是如何:

$amqp = new AMQPConnection($your_connection_params);
$amqp->setTimeout($seconds);
Run Code Online (Sandbox Code Playgroud)

然后,当您在队列上调用consume()时,如果在超时期限内没有消息到达,则将使用消息"资源暂时不可用"从consume()抛出AMQPException.如果您突然消耗掉()或达到超时,请务必在队列对象上调用cancel()以正确重置使用者.为此,您需要生成一个全局唯一的使用者标记,并将其作为未记录的第三个参数传递给消耗:

$tag = uniqid() . microtime(true);
$queue->consume($callback, $flags, $tag);
$queue->cancel($tag);
Run Code Online (Sandbox Code Playgroud)

这样,您可以稍后再次调用consume(),而不会产生令人头疼的奇怪问题.

  • 今天进入这个场景,你的回答引导我朝着正确的方向前进.不推荐使用`setTimeout`方法,而选择`setReadTimeout`.还要确保捕获超时时消耗抛出的`AMQPConnectionException`异常.AMQP版本1.4 (2认同)