Получение максимальной отдачи от стековых трасс при использовании Reactor - PullRequest
0 голосов
/ 24 сентября 2018

При попытке написать подпружиненное (загрузочное) приложение, в основном полностью в реактивных API, используя Reactor 3.1.6, я обнаружил, что трассировки стека быстро становятся практически непригодными.

Обычно я подходил к написанию реактивов, когда мои открытые методы были Mono или Flux, а также множество частных методов для использования в качестве ссылок на методы для хорошо читаемых потоков (пример)

public Mono<Foo> somePublicMethod(final Bar arg) {
    return Mono.just(arg)
               .map(this::internalTransformation)
               .flatMap(this::nicelyNamedInternalTransformationAsync);
}

private Foobar internalTransformation(final Bar arg) {
    // ...
}

public Mono<Foo> nicelyNamedInternalTransformationAsync(final Foobar arg) {
    // ..
}

Кроме того, я довольно часто буду switchIfEmpty для управления потоком или onErrorResume.Как только у меня появляется более полное приложение, где слушатель событий вызывает сервис, который использует другие сервисы, трассировки стека для ошибок оказываются просто гигантскими.Большинство из них - это шаблон реактора, и я думаю, что я просто плохо знаю, как на самом деле объединять потоки, так как на самом деле выяснить путь через вызовы потоков чертовски сложно.Возможно, это была одна из самых трудных вещей для моей команды, чтобы заинтересоваться этим тоже.

Существуют ли какие-либо руководства по стилю или шаблоны для программирования с потоками, которые будут давать краткие и полезные трассировки для отладки?

Для конкретного примера, есть ли способ отобразить / переключить поток, который бы не включал восходящий поток в трассировку?

...