rabbitmq — Использование xdebug в PHP AMQPQueue :: потребление ()

Мы используем RabbitMQ и хотели бы использовать xdebug внутри потребителя. Мы используем AMQPQueue прослушивать сообщения в очереди. Я могу использовать xdebug до AMQPQueue::consume() но однажды consume() называется не могу получить точку останова. Любая помощь будет отличной.

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, поэтому может показаться, что приложение зависает.

1

Другие решения

Других решений пока нет …