我们正在使用 RabbitMQ,并希望在消费者内部使用 xdebug。我们AMQPQueue
用来监听队列中的消息。我最多可以使用 xdebug,AMQPQueue::consume()
但是一旦consume()
被调用,我就无法获得断点。任何帮助都会很棒。
问问题
439 次
1 回答
1
AMQPQueue::consume(callable $callback = null, $flags = AMQP_NOPARAM, $consumerTag = null)
在 C ( amqp_queue.c:816 ) 中实现,当新消息 ( amqp_queue.c:908 ) 在通道上出现时 (就 AMQP 而言) 调用回调函数$callback
( amqp_queue.c:963 )。如果你在回调函数中设置断点,xdebug 将在回调函数被调用时停止。
在引擎盖下有无限循环阻塞套接字读取,它读取通道上的所有内容,如果是消息,则将其传递给回调。该循环仅在发生某些异常(包括在回调中)和false
返回布尔值时才中断。
当通道上没有消息时,通道consume()
函数将运行并阻塞主 PHP 执行线程,因此看起来应用程序正在挂起。
于 2015-09-15T15:37:08.747 回答