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 に答える