当使用Reactor 3.1.6尝试主要完全使用反应式API编写spring(boot)应用程序时,我发现堆栈跟踪很快变得几乎不可用。
通常,我已经通过将我的公共方法设为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
。一旦有了更多完整的应用程序,事件监听器就会调用使用其他服务的服务,那么错误的堆栈跟踪就绝对是巨大的。其中大部分是反应堆的样板,我想我真的不知道如何将流实际链接在一起,因为实际上弄清楚通过流调用的路径非常困难。可以说,这也是我的团队对此最感兴趣的卖点之一。
对于使用流进行编程会产生简洁且有用的stracktrace进行调试的程序,是否有任何样式指南或模式?
对于特定示例,是否有一种方法可以在流中进行映射/切换,以使其在跟踪中不包括上游?