web/마이크로서비스

리액티브 스트림의 이해

반응형

리액티브 스트림은 총 4개의 인터페이스로 구성되어 있다. 

ㅁ 발행자(Publisher) 

- 데이터의 소스를 가지고 있으며 Subscriber의 요청이 오면 데이터를 발행한다. 구독자는 발행자에 대한 구독을 추가할 수 있다. Subscribe 메소드를 통해서 구독자를 추가할수 있다.

1
2
3
public interface Publisher<T> {
    public void subscribe(Subscriber<? Super T> s);
}
cs


ㅁ 구독자 (Subscriber) 

-  구독자는 데이터 스트림을 소비하기 위해 발행자를 구독한다. 구독자는 다양한 메서드를 제공하는데 대부분의 메서드가 콜백으로 등록되어 사용된다.

1
2
3
4
5
6
public interface Subscriber<T> {
  public void onSubscribe(Subscription s);
  public void onNext(T t);
  public void onError(Throwable t);
  public void onComplete();
}
cs


ㅁ 구독 (subscription) 

단 하나의 발행자와 단 하나의 구독자를 연결해주며 그 둘 사이에서만 데이터 교환을 중재한다. 데이터 교환은 구독자의 request 메서드 호출로 실행되고 cancel로 종료된다.

1
2
3
4
public interface Subscription {
  public void request(long n);
  public void cancel();  
cs


ㅁ 프로세서 (procesor) 

프로세서는 처리 단계를 나타내며, 발행자 인터페이스와 구독자 인터페이스를 모두 상속한다. 프로세서는 발행자와 구독자 사이의 계약을 반드시 준수해야한다. 프로세서는 발행자와 구독자를 연결해서 chaining(메서드가 반환하는 객체를 다른 변수에 할당하지 않고 객체가 가지고 있는 메소드를 호출하는 것)을 할 수도 있다.

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



리액터에는 발행자 플로세서로 사용되는 flux와 mono가 있다. flux는 0 또는 N개의 이벤트를 발행할 수 있고, Mono는 0 또는 1 개의 이벤트만 발행할 수 있다. 그래서 다수의 데이터 요소 또는 값의 리스트를 스트림으로 전송할 때만 사용된다.

반응형