Да, добавление @Traced позволяет активировать трассировку на реактивных маршрутах.
К сожалению, использование как реактивных, так и реактивных маршрутов JAX-RS приводит к ошибкам при трассировке потоков цикла событий, используемых реактивной конечной точкой JAX-RS при их выполнении.
Я запустил Quarkus только 2 дня назад, так что я не совсем понимаю причину такого поведения (и нормально ли это или это ошибка), но, очевидно, переключение между двумя полностью испортило трассировку.
Вот пример, который легко воспроизвести:
- Создайте реактивную конечную точку REST Easy, возвращающую пустой Multi
- Создайте собственный реактивный маршрут
- настроить потоки ввода-вывода на 2 (проще быстро воспроизвести)
- Запустите приложение и поочередно запросите две конечные точки.
Вот скриншот, который показывает проблему
Как вы можете видеть, как только ресурс JAX-RS используется и выполняется в одном из двух доступных потоков, он портит его, искажая сообщенный trace_id (я не знаю, генерируется ли это генерация или отчет в журналах). сломанный) в журналах для следующих вызовов реактивного маршрута.
Этого не происходит на ресурсе JAX-RS, как вы также можете заметить на скриншоте. Так что, похоже, это относится только к реактивным маршрутам.
Еще одним моментом здесь является тот факт, что реактивные ресурсы JAX-RS неправильно сообщаются в Jaeger. (с упоминанием отсутствующего корневого диапазона) Не уверен, связано ли это с проблемой, но это еще один неприятный момент.
Я думаю полностью удалить реактивную конечную точку JAX-RS и заменить их обычным реактивным маршрутом, чтобы устранить эту ошибку. Я был бы признателен, если бы кто-нибудь с большим опытом, чем я, мог проверить это или сказать мне, что я сделал не так :)
РЕДАКТИРОВАТЬ 1: Я добавил фильтр маршрута с приоритетом 500, чтобы очистить MDC, и ошибка все еще существует, поэтому определенно не из MDC.
РЕДАКТИРОВАТЬ 2: Я открыл отчет об ошибке в Quarkus.
РЕДАКТИРОВАТЬ 3: Похоже, это связано с тем, как работают обе реализации (локальные потоки по сравнению с распространением контекста в контексте на основе акторов) Итак, если реактивные ресурсы JAX-RS не помечены @Blocking (и не выполняются в отдельном пуле потоков), реактивный JAX-RS и Реактивные маршруты Vertx несовместимы, когда дело доходит до трассировки (но, вероятно, то же самое и для информации, связанной с MDC, поскольку MDC также связан с потоками)
person
kij
schedule
18.02.2021