리액터 개발자 도구
-
리액터 플로우 중에 무언가 잘못된다면 어떻게 대응할 수 있을까? 스택 트레이스를 살펴보면 된다고 생각할 수 있지만, 일반적으로 여러 스레드에 걸쳐 수행될 수 있으므로, 스택 트레이스를 통해서는 쉽게 확인할 수 없다.
-
리액터는 나중에 구독에 의해 실행되는 작업 흐름을 조립하는 비동기, 논블로킹 연산을 사용한다.
-
리액터는 스택 트레이스를 통해서 가능한 먼 곳 까지 따라가지만, 다른 스레드의 내용을 쫒아가지는 못한다. 이 한계를 극복하게 해주는 것이 바로 리액터의
Hooks.onOperatorDebug()
메서드이다.
class ReactorDebuggingExample {
public static void main(String args[]) {
Hooks.onOperatorDebug();
Mono<Integer> source;
if (new Random().nextBoolean()) {
source = Flux.range(1, 10).elementAt(5);
} else {
source = Flux.just(1, 2, 3, 4).elementAt(5);
}
source.subscribeOn(Schedulers.parallel())
.block();
}
}
- 리액터는 오류 관련 핵심 정보를 스레드 경계를 넘어서 전달할 수 있는 방법을 만들었다. 리액터 자체로는
JVM
이 지원하지 않으므로 스레드 경계를 넘을 수 없지만,Hooks.onOperatorDebug()
를 호출하면 리액터가 처리 흐름 조립 시점에서의 호출부 세부 정보를 수집하고 구독해서 실행되는 시점에 세부 정보를 넘겨준다.
참고 문헌
>> Home