Отладка приложения Spring WebFlux / Reactor с помощью IntelliJ IDEA - PullRequest
0 голосов
/ 29 июня 2018

Я создаю приложение Spring WebFlux / Reactor с IntelliJ IDEA. Отладчик IDEA показывает множество бесполезных строк, таких как MonoDefer, MonoFlatMap и т. Д. Есть ли способ легко отслеживать стеки?

intellij-debug-traces

1 Ответ

0 голосов
/ 02 июля 2018

В асинхронном мире, к сожалению, трассировки стека теряют свою значимость. Здесь вы видите стек, который показывает операторов, составляющих всю реактивную цепочку (включая те, которые Spring Framework использует поверх тех, которые вы определили в вашем контроллере). Единственная проблема в том, что он показывает, где цепочка была запущена (или «подписана»), потому что выполнение лениво, и это единственный путь, видимый во время выполнения ...

Для ошибок и собственно трассировки стека есть оператор .checkpoint(), который вы можете явно использовать в цепочке для сбора информации о «сборке» (где цепочка операторов объявлена ​​в вашем коде), чтобы обеспечить немного больше контекста. Затем он отображается как часть стеков стека исключений, как исключенное исключение.

Нам также было слишком сложно использовать новую функцию асинхронного отладчика IntelliJ, потому что модель исполнения не обеспечивает фиксированную пару «сайт планирования против сайта исполнения»: абстракция Scheduler, используемая для переключения потоков в середине последовательности операторы, такие как publishOn и subscribeOn, подразумевают произвольные «сайты исполнения» (произвольный ExecutorService, пул ролл-ваш-собственный-поток, Thread, ...).

Я рекомендую вам прочитать о трассировке стека и отладке в официальной справочной документации по http://projectreactor.io/docs/core/release/reference/#debugging

...