티스토리 뷰

learning

Flux 인스턴스 생성하기 (2/12)

눈침침 2021. 3. 2. 00:42

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 프로젝트를 직접 받아서 돌려보면서 해보는게 훨씬 쾌적합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함