Reactive Streams 4

07 Blocking to Reactive

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/BlockingToReactive 에 대한 문제풀이이다. Reactive 코드 속에서 레거시하고, Reactive하지 않은 코드는 어떻게 처리해야할까? 예를들어, JDBC connection과 같은 Blocking 코드가 있고 이를 Reactive pipeline에 통합해한다면 어떻게해야할까? 가장 좋은 방법은, blocking이 진행되는 부분을 Schedulers를 통해 별도의 스레드에서 실행되도록 고립시키는 것이다. JDBC의 예에서는 fromIterable 팰터리 메서드를 사용할 수 있다. subscribeOn 이 메서드는 제공된 스케줄러에서 시작부터 시퀀스를 분리해서 실행할수 있도록..

06 Reactive To Blocking

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/ReactiveToBlocking 에 대한 문제풀이이다. Reactive에 기존 코드의 일부를 사용하고 싶을 때에는 어떻게 해야할까? 해당 코드가 Blocking코드라면, 해당 로직을 고효율 Reactive 코드의 흐름 속에 어떻게 추가할 수 있을까? 이런 코드는 절대 Reactive 코드 실행 중간에 실행되도록 하면 안된다. Reactive pipeline의 중간에 block이 되어버릴 수 있기 때문이다. 예를 들어, 중간에 Block이 되는 코드로서 다음과 같은 예시를 들 수 있다. User monoToValue(Mono mono) { return mono.block(); } Itera..

05 Others operations

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/OthersOperations 에 대한 문제풀이이다. 이번 장은 Reactor 3의 다양하고 유용한 Operator들에 대해 살펴본다. 먼저, zip Operator는 복수개의, 각각의 레이턴시를 두고도착하는 Publisher들을 합쳐서 연산할 수 있는 Operator이다. Flux userFluxFromStringFlux(Flux usernameFlux, Flux firstnameFlux, Flux lastnameFlux) { return Flux.zip( (args) -> { return new User((String) args[0], (String) args[1], (String) a..

04 Adapt

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/Adapt의 문제풀이이다. RxJava3나 Reactor3 모두 Reactive Streams의 구현체이기 때문에, 외부 라이브러리 없이 서로와 호환된다. 예를들어, Flux(Reactor3의 Publisher 구현체)를 Flowable(RxJava3의 Publisher 구현체)로 (혹은 반대로) 변경할 수 있다. Flowable fromFluxToFlowable(Flux flux) { return Flowable.fromPublisher(flux); } Flux fromFlowableToFlux(Flowable flowable) { return Flux.from(flowable); } O..