在PHP中使用xdebug AMQPQueue :: consume()

时间:2015-09-15 13:22:21

标签: php rabbitmq xdebug amqp php-amqp

我们正在使用RabbitMQ,并希望在消费者中使用xdebug。我们正在使用AMQPQueue来侦听队列中的消息。我可以使用xdebug到AMQPQueue::consume()但是一旦consume()被调用,我就无法获得断点。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

在C(AMQPQueue::consume(callable $callback = null, $flags = AMQP_NOPARAM, $consumerTag = null))中实现了

amqp_queue.c:816,当一个频道上出现新消息(amqp_queue.c:908)时(根据AMQP),调用回调函数$callback({{ 3}})。如果在回调函数内设置断点,xdebug将在调用该回调时停止。

引擎盖下有无限循环,阻塞套接字读取读取通道上的所有内容,如果是消息,则将其传递给回调。只有在发生某些异常时(包括在回调中)和布尔值false返回时,该循环才会中断。

当通道consume()上没有消息时,函数将运行并阻塞主PHP执行线程,因此它可能看起来像应用程序挂起。