❯ Reactor(Project Reactor)
Reactive Streams의 표준사항을 구현한 구현체 중 하나이다.
Reactor의 특징
- Non-Blocking 통신을 지원한다.
- Publisher 타입으로 Mono[0|1] 와 Flux[N]을 지원한다.
- 서버간 통신이 잦은 MSA(MicroService Architecture) 기반 애플리케이션에 적합하다.
- Backpressure를 제공한다.(Subscriber 속도가 Publisher 속도를 따라가지 못할때 제어하는 전략)
Reactor 기본 구조
import reactor.core.publisher.Flux;
import reactor.core.scheduler.Schedulers;
public class HelloReactorExample {
public static void main(String[] args) throws InterruptedException {
Flux
.just("Hello", "Reactor")
.map(message -> message.toUpperCase())
.publishOn(Schedulers.parallel())
.subscribe(System.out::println,
error -> System.out.println(error.getMessage()),
() -> System.out.println("# onComplete"));
Thread.sleep(100L);
}
}
- Flux: Reactor Sequence의 시작점으로, Flux는 여러건의 데이터를 처리한다는 것을 의미한다. (0~1개는 Mono)
- just(): Publisher 역할을 한다.
- map(): 전달받은 데이터를 가공하는 Operator
- publishOn(): 스레드 관리자 역할을 하는 Scheduler를 지정해준다.
- subscribe(): 총 세개의 람다 표현식을 가지며 첫번째 파라미터는 emit된 데이터를 소비하는 역할을, 두번째 파라미터는 에러 발생시 처리하는 역할을, 마지막 파라미터는 Reactor Sequence가 종료된 후 처리하는 역할을 한다.
참고자료
'부트캠프 개발일기 > Spring Webflux' 카테고리의 다른 글
71일차: Spring WebFlux (0) | 2023.05.24 |
---|---|
69일차: 리액티브 프로그래밍 (0) | 2023.05.22 |