본문 바로가기

Pattern/Funtional

Reactive Streams

반응형

🙋‍♂️ API Components


1. Publisher (생산자)

  • 데이터를 생성하고 통지한다.
  • subscribe : 소비자를 등록할 때 호출

2. Subscriber (소비자)

  • 통지된 데이터를 전달받아서 처리한다.
  • onSubscribe : 데이터를 최초 통지할 때 호출
  • onNext : 데이터를 통지할 때 마다 호출
  • onError : 데이터 통지에서 에러가 발생했을 때 호출
  • onComplete : 데이터 통지가 완료 되었을 때 호출

3. Subscription

  • 구독 자체를 의미, 전달 받을 데이터의 개수를 요청하고 구독을 해지한다.
  • request : 데이터 개수 요청
  • cancel : 요청 취소

4. Processor

  • Publisher와 Subscriber의 모든 기능이 있음.

🙋‍♂️ Publisher와 Subscriber간의 프로세스 흐름


  • Subscriber(이하 소비자)는 Publisher(이하 생산자)를 구독한다.
  • 생산자는 데이터를 통지할 준비가 되었음을 소비자에게 알린다.(onSubscribe)
  • 소비자는 전달 받을 통지 데이터 개수를 생산자에게 요청한다(request).
  • 생산자는 데이터를 생산한다. (계속 생산중)
  • 생산자는 요청 받은 개수만큼 데이터를 통지한다(onNext)
  • 완료 또는 에러가 발생할 때까지 데이터 생성, 통지, 요청을 계속한다.(onError , onComplete)

🙋‍♂️ Cold Publisher & Hot Publisher


1. Cold Publisher(차가운 생산자)

  • 생산자는 소비자가 구독 할때마다 데이터를 처음부터 새로 통지한다.
  • 데이터를 통지하는 새로운 타임 라인이 생성된다.
  • 소비자는 구독 시점과 상관없이 통지된 데이터를 처음부터 전달 받을 수 있다.
public class ColdPublisherExample
{
    public static void main(String[] args)
    {
        Flowable<Integer> flowable = Flowable.just(1, 3, 5, 7);

        flowable.subscribe(data -> System.out.println("구독자1 " + data));
        flowable.subscribe(data -> System.out.println("구독자2 " + data));
    }
}

2. Hot Publisher(뜨거운 생산자)

  • 생산자는 소비자 수와 상관없이 데이터를 한번만 통지한다.
  • 데이터를 통지하는 타임 라인은 하나이다.
  • 소비자는 발행된 데이터를 처음부터 전달 받는게 아니라 구독한 시점에 통지된 데이터들만 전달 받을 수 있다.
public class HotPublisherExample
{
    public static void main(String[] args)
    {
        PublishProcessor<Integer> processor = PublishProcessor.create();
        processor.subscribe(data -> System.out.println("구독자1 : " + data));
        processor.onNext(1);
        processor.onNext(3);

        processor.subscribe(data -> System.out.println("구독자1 : " + data));
        processor.onNext(5);
        processor.onNext(7);

        processor.onComplete();
    }
}

 

반응형

'Pattern > Funtional' 카테고리의 다른 글

RxJava 연산자  (0) 2021.07.28
Flowable과 Observable  (0) 2021.07.26
Single, Maybe, Completable  (0) 2021.06.17
RxJava Publisher, Subscriber  (0) 2020.07.23