6.1 마블 다이어그램이란?
마블(구슬) + 다이어그램(도표)
Publisher 의 데이터 생성 + Operator 데이터 가공 + 데이터 출력 과정을 도표로 나타낸 것
- Publisher 가 데이터를 emit 하는 타임라인
- OnComplete signal: 정상적으로 데이터가 emit 되었을 때 Publisher 가 보내는 signal
- emit 된 데이터에 Operator 함수를 적용하여 데이터 가공
- Operator 를 거쳐 변환된 데이터 타임라인
- onComplete signal: 데이터 처리 종료 후 Publisher 가 보내는 signal
- onError signal: 데이터 가공시 에러가 발생하면 Publisher 가 보내는 signal
6.2 마블 다이어그램으로 Reactor 의 Publisher 이해하기
1) Mono
0개 혹은 1개의 데이터를 emit 하는 Publisher
(RxJava 에서는 1개의 데이터를 emit 하는 Single, 0개 또는 1개의 데이터를 emit 하는 Maybe Publisher 를 구분하지만 Reactor 에서는 통일)
public class MonoExample {
public static void main(String[] args) {
// 데이터 1개 emit
Mono
.just("Hello Reactor")
.subscribe(System.out::println);
// 데이터 0개 emit
// 데이터가 없으므로 바로 onComplete signal
// 데이터를 전달 받을 필요는 없지만 특정 작업이 완료되었음을 알리고 싶을때 onComplete signal 만 보내도록 함
Mono
.empty()
.subscribe(
none -> System.out.println("# emitted onNext signal"), // onNext signal
error -> {}, // onError signal (Exception 을 받아서 처리)
() -> System.out.println("# emitted onComplete signal") // onComplete signal
);
}
}
2) Flux
0개 ~ N개의 데이터를 emit 하는 Publisher
public class ExampleFlux {
public static void main(String[] args) {
// just
Flux.just(6, 9, 13)
.map(num -> num % 2)
.subscribe(System.out::println);
// fromArray
// 배열로 부터 Flux 객체 생성
Flux.fromArray(new Integer[]{3, 6, 7, 9})
.filter(num -> num > 6)
.map(num -> num * 2)
.subscribe(System.out::println);
// concatWith
// upstream 에서 emit 된 데이터와 인자로 주어진 emit 데이터를 합쳐서 emit
Mono.justOrEmpty("Steve")
.concatWith(Mono.justOrEmpty("Jobs"))
.subscribe(System.out::println);
// collectList()
// emit 된 데이터를 하나로 모아 리스트로 만들어 emit
// emit 결과는 Mono(리스트 하나이므로)
Flux.concat(
Flux.just("Mercury", "Venus", "Earth"),
Flux.just("Mars", "Jupiter", "Saturn"),
Flux.just("Uranus", "Neptune", "Pluto"))
.collectList()
.subscribe(planets -> System.out.println(planets));
}
}
'2023~ > 스프링으로 시작하는 리액티브 프로그래밍' 카테고리의 다른 글
Ch08 Backpressure (0) | 2024.10.22 |
---|---|
Ch07 Cold Sequence 와 Hot Sequence (0) | 2024.10.02 |
Ch05 Reactor 개요 (0) | 2024.09.18 |
Ch04 리액티브 프로그래밍을 위한 사전 지식 (0) | 2024.09.17 |
Ch03 Blocking I/O 와 Non-Blocking I/O (0) | 2024.08.28 |
댓글