Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다.
페이지 요약을 시작해보자,
RxJava3
와Reactor 3
타입은 별도의 라이브러리 없이 함께 사용할 수 있다.- 두 라이브러리 모두 어떤한 Publisher로 부터 인스턴스를 만들 수 있는 Factory 메서드를 제공하기 때문입니다.
서로 매칭되는 타입은 어떤게 있을까?
그리곡, 과연 사용할 일이 있을까?
Publisher: Flux: Flowable
연습문제
Q1. Flux to Flowable back to Flux
우선 JavaDoc 문서를 찾아놓자! Flowable (RxJava)
// TODO Adapt Flux to RxJava Flowable
Flowable<User> fromFluxToFlowable(Flux<User> flux) {
return Flowable.ambArray(flux); // <- 잘못된 함수 선택
}
// TODO Adapt RxJava Flowable to Flux
Flux<User> fromFlowableToFlux(Flowable<User> flowable) {
return Flux.from(flowable);
}
성공, 하지만, Flowable.ambArray()
는 사실 Publisher 중 처음 데이터를 전달해주는 Publisher 만 구독하는 용도의 함수 였다.
실제로는 fromPublisher()
메서드를 사용하는게 본래 의도에 맞습니다.
// TODO Adapt Flux to RxJava Flowable
Flowable<User> fromFluxToFlowable(Flux<User> flux) {
return Flowable.fromPublisher(flux);
}
Q2. Flux to Observable and back to Flux
// TODO Adapt Flux to RxJava Observable
Observable<User> fromFluxToObservable(Flux<User> flux) {
return Observable.fromPublisher(flux);
}
Observable
이Publisher
를 상속하는지 확인 -> XObservable
이Flowable
로 변경하는 메서드 확인 ->toFlowable(@NonNull BackpressureStrategy strategy)
발견- JavaDoc 에 BackpressureStrategy 가 잘 정리되어 있음, 나는 데이터 손실이 없어 보이는
BackpressureStrategy.BUFFER
를 선택
// TODO Adapt RxJava Observable to Flux
Flux<User> fromObservableToFlux(Observable<User> observable) {
return Flux.fromPublisher(observable.toFlowable(BackpressureStrategy.BUFFER));
}
Q3 Mono to Single and back to Mono
관련있어 보이는 JavaDoc
// TODO Adapt Mono to RxJava Single
Single<User> fromMonoToSingle(Mono<User> mono) {
return Single.from;
}
// TODO Adapt RxJava Single to Mono
Mono<User> fromSingleToMono(Single<User> single) {
return Mono.from(single.toFlowable());
}
Q4 Mono to CompletableFuture and back to Mono
관련있어 보이는 JavaDoc
- Mono (reactor-core)
- CompletableFuture (Java SE 11 & JDK 11)
Mono
를CompletableFuture
로, 이런건 보통 표준라이브러리에서 제공하지 않으니, Mono API를 살펴보자. ->toFuture()
메서드 발견
// TODO Adapt Mono to Java 8+ CompletableFuture
CompletableFuture<User> fromMonoToCompletableFuture(Mono<User> mono) {
return mono.toFuture();
}
- 역방향 역시
Mono
API 를 살펴보자 ->toFuture()
가 있어서 혹시나 하고 찾아보니 역시나fromFuture()
가 존재함을 발견!!
// TODO Adapt Java 8+ CompletableFuture to Mono
Mono<User> fromCompletableFutureToMono(CompletableFuture<User> future) {
return Mono.fromFuture(future);
}
이렇게 9장 Adapt 완료.