본문 바로가기
백엔드/Spring

Reactive Streams

by 작은소행성 2022. 4. 16.

Reactive Streams

Reactive Streams 는 논블로킹 백프레셔를 이용한 비동기 데이터 스트림 처리 표준이다.

Reactive Streams 을 사용하는 주목적은  Subscriber가 Publisher의 생산 속도를 제어하는 것이다.

 

Reactive Streams 에는 네 가지 인터페이스가 있다. 

  • Publisher 
    • 데이터를 생성하고 내보낸다.
  • Subscriber 
    • 데이터를 구독하고 통지 받은 데이터를 처리한다.
  • Subscription 
    • Publisher, Subscriber 간에 데이터가 교환될 수 있도록 연결하는 역할을 하며, 전달 받을 데이터의 개수를 요청하고 구독을 해지한다.
  • Processor 
    • Publisher, Subscriber 모두 상속받은 인터페이스이다.

 

 

Reactive Streams 흐름 이해하기

https://brunch.co.kr/@springboot/153

 

Subscriber subscribe 를 호출하는 순간 Publisher 에서 Subscriber로 데이터가 전달이 시작된다.

 

Subscriber 가 Publisher 에게 subscribe 하면 Publisher 가 데이터(시퀀스)를 전달한다.

데이터(시퀀스)를 전달하기 전에 Subscription이 onSubscribe()를 호출하고

Subscriber 는 request(n)를 호출하여 몇개의 데이터를 보내달라고 요청한다. 

이 과정에서 에러가 발생하면 onError()를 호출하고

데이터(시퀀스) 전달이 완료가 되면 onComplete()를 호출한다.

 

Subscriber 가 Publisher 에 Request 하는 과정을 보통 Back-Pressure 라고 한다. 

Back-Pressure는 Push하는 데이터(시퀀스)의 흐름을 제어할 수 있다. 

 

 

 

 

아래 코드는 Reactive Streams 에 정의된 코드이다.

public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {}


public interface Publisher<T> {

    public void subscribe(Subscriber<? super T> s);

}


public interface Subscriber<T> {

    public void onSubscribe(Subscription s);

    public void onNext(T t);

    public void onError(Throwable t);

    public void onComplete();

}


public interface Subscription {

    public void request(long n);

    public void cancel();

}

 

 

Reactive Streams 는 Maven 에서 다운받을 수 있다.

 

 

 

참고

https://brunch.co.kr/@springboot/153

 

Project Reactor 3. 리액티브 스트림

3. Reactive Streams Interface | "Project Reactor" 시리즈의 세 번째 글입니다. 하지만, 이 글에서도 "Reactor" 에 대해서는 거의 다루지 않을 예정입니다. 이 글에서는, "Reactive Streams"에 대해서 공부합니다. 급

brunch.co.kr

Reactive Streams 

https://engineering.linecorp.com/ko/blog/reactive-streams-with-armeria-1/

 

Armeria로 Reactive Streams와 놀자! - 1 - LINE ENGINEERING

LINE+에서 오픈소스 Armeria와 Central Dogma를 개발하고 있는 엄익훈입니다. 저는 Reactive Streams의 개념과, Reactive Streams를 오픈 소스 비동기 HTTP/2, RPC, REST 클라이언트/서버 라이브러리인 Armeria에서 사용

engineering.linecorp.com

 

Reactive Streams API GitHub

https://github.com/reactive-streams/reactive-streams-jvm

 

GitHub - reactive-streams/reactive-streams-jvm: Reactive Streams Specification for the JVM

Reactive Streams Specification for the JVM. Contribute to reactive-streams/reactive-streams-jvm development by creating an account on GitHub.

github.com

 

반응형