The example code for RabbitMQ州
我们的代码会阻止我们的$ channel有回调。每当我们 接收消息我们的$ callback函数将通过收到 消息。
使用此代码段
while(count($channel->callbacks)) {
$channel->wait();
}
这让我感到困惑,因为the default timeout for PhpAmqpLib\Channel\AbstractChannel::wait
is forever。
public function wait($allowed_methods = null, $non_blocking = false, $timeout = 0)
因此,如果wait
永久阻止,代码将如何达到while
循环的第二次迭代?
只有在while
传递wait
时才需要$timeout > 0
循环才会安全吗?
答案 0 :(得分:2)
wait
调用的超时参数是放弃前等待下一条消息的时间。正如您所说,默认值是“永远”,这意味着“直到消息到达”。
但是,一旦收到并处理了一条消息,wait
呼叫就会退出;它可能被命名为waitForNextEvent()
。您可以在链接到的源中看到:
if ($this->should_dispatch_method($allowed_methods, $method_sig)) {
return $this->dispatch($method_sig, $args, $amqpMessage);
}
因此,要接收多条消息,您需要多次拨打wait()
。通常,在消费者中,您希望无限次地调用它,因此您可以使用while(true)
,但如果取消注册所有回调,则允许循环退出,这样可以优雅地退出。
答案 1 :(得分:0)
您显示的代码将代表AMQP消息的工作者或处理者
因为它将侦听来自AMQP服务器的丢弃消息,它将永远等待/侦听/循环这些消息。