Tech.io의 'Reactive Programming with Reactor 3 - Flux'을 공부하면서 정리하는 글입니다.
Flux<T>
- 리액티브 스트림의
Publisher
역할을 한다. - 다음과 같은 연산(=Operators)들이 (추가로) 정의되어 있다.
- 생성 (Generate)
- 변환 (Transform)
- 조율 (Orchestrate)
- 0에서 n 개의
<T>
요소를 보낸 뒤(=emit,onNext
이벤트) 성공(=onComplete
'종료' 메서드)하거나 에러를 발생(onError
'종료' 메서드)- 종료 이벤트가 발생하지 않으며 무한한(데이터를 만들어내는) 상태임.
- Static 팩토리 메서드를 이용해서 생성할 수 있음.
- 인스턴스 메서드를 이용해서 비동기 파이프라인 구축을 정의할 수 있습니다.(데이터 처리 방법을 나열할 수 있다는 의미)
마블 다이어그램
실제 예제 코드
Flux.fromIterable(getSomeLongList())
.delayElements(Duration.ofMillis(100))
.doOnNext(serviceA::someObserver)
.map(d -> d * 2)
.take(3)
.onErrorResumeWith(errorHandler::fallback)
.doAfterTerminate(serviceM::incrementTerminate)
.subscribe(System.out::println);
연습
Q. 빈 Flux를 만들자.
Flux.empty()
Q. 여러 값으로부터 Flux를 만들자.
Flux.just("foo", "bar");
Q 리스트로부터 Flux 를 만들자.
Flux.fromIterable(Arrays.asList("foo", "bar"));
Q Flux 가 IllegalStateException
을 발생하도록.
Flux.error(new IllegalStateException());
Q. Flux 가 0부터 9까지 100ms 간격으로 데이터를 보내도록 하자
Flux.interval(Duration.ofMillis(100))
.take(10);
관련글
2021/03/02 - [learning] - Reactive Programming 소개 (1/12)
추가로
웹 사이트가 좀 반응이 느리니 가능하면 GitHub 프로젝트를 직접 받아서 돌려보면서 해보는게 훨씬 쾌적합니다.