1

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

4

1 回答 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 回答