Мы используем RabbitMQ и хотели бы использовать xdebug внутри потребителя. Мы используем AMQPQueue
прослушивать сообщения в очереди. Я могу использовать xdebug до AMQPQueue::consume()
но однажды consume()
называется не могу получить точку останова. Любая помощь будет отличной.
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, поэтому может показаться, что приложение зависает.
Других решений пока нет …