본문 바로가기
부트캠프 개발일기/Spring Webflux

70일차: Reactor(Project Reactor)

by shyun00 2023. 5. 23.

❯ 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가 종료된 후 처리하는 역할을 한다.

참고자료

https://projectreactor.io/

 

 

 

 

'부트캠프 개발일기 > Spring Webflux' 카테고리의 다른 글

71일차: Spring WebFlux  (0) 2023.05.24
69일차: 리액티브 프로그래밍  (0) 2023.05.22