我们正在使用RabbitMQ,并希望在消费者中使用xdebug。我们正在使用AMQPQueue
来侦听队列中的消息。我可以使用xdebug到AMQPQueue::consume()
但是一旦consume()
被调用,我就无法获得断点。任何帮助都会很棒。
答案 0 :(得分:1)
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执行线程,因此它可能看起来像应用程序挂起。