이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/Adapt의 문제풀이이다.
RxJava3나 Reactor3 모두 Reactive Streams의 구현체이기 때문에, 외부 라이브러리 없이 서로와 호환된다.
예를들어, Flux(Reactor3의 Publisher 구현체)를 Flowable(RxJava3의 Publisher 구현체)로 (혹은 반대로) 변경할 수 있다.
Flowable<User> fromFluxToFlowable(Flux<User> flux) {
return Flowable.fromPublisher(flux);
}
Flux<User> fromFlowableToFlux(Flowable<User> flowable) {
return Flux.from(flowable);
}
Observable은 Publisher의 구현체가 아니기 때문에 조금 더 트리키한 방법이 필요하다.
Flux에서 Observable로 변환하는 것은 위 방법과 다르지 않지만,
Observable은 backpressure를 지원하지 않기 때문에 Observable과 backpressure를 조합해 먼저 Flowable을 만든 후 Flux로 변환해야한다.
Observable<User> fromFluxToObservable(Flux<User> flux) {
return Observable.fromPublisher(flux);
}
Flux<User> fromObservableToFlux(Observable<User> observable) {
return Flux.from(observable.toFlowable(BackpressureStrategy.LATEST);
}
다음은, Reactor3의 Mono를 RxJava의 Single (혹은 반대로) 변환해보자.
Single<User> fromMonoToSingle(Mono<User> mono) {
return Single.fromPublisher(mono);
}
Mono<User> fromSingleToMono(Single<User> single) {
return Mono.from(single.toFlowable());
}
마지막으로 Mono와 Java8의 CompletableFutrure 역시 서로로 변환될 수 있다.
CompletableFuture<User> fromMonoToCompletableFuture(Mono<User> mono) {
return mono.toFuture();
}
Mono<User> fromCompletableFutureToMono(CompletableFuture<User> future) {
return Mono.fromFuture(future);
}
참고
tech.io/playgrounds/929/reactive-programming-with-reactor-3/Adapt
사업자 정보 표시
1 | g | asdf | 사업자 등록번호 : 123-12-12345 | TEL : 010-111-1111 | Mail : asdf@gmail.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
'Reactive Programmingaaa > Reactor 기초 문제풀이~' 카테고리의 다른 글
07 Blocking to Reactive (0) | 2021.03.30 |
---|---|
06 Reactive To Blocking (1) | 2021.03.30 |
05 Others operations (0) | 2021.03.30 |
03 Request (0) | 2021.03.16 |
02 Merge (0) | 2021.03.16 |
01 Introduction to Reactive Programming (5) | 2021.03.02 |