JAVA/Reactor

람다의 대안 : BaseSubscriber

lovineff 2020. 6. 4. 18:53

람다로 구성하는 대신 전체 Subscriber를 가져오는 subscribe 메소드가 있다

BaseSubsriber 객체는 단일 사용이다

- 첫번째 Publisher를 cancel하면 두번째 Publisher도 cancel한다.

- 인스턴스를 두 번 사용하면 구독자의 onNext 메소드를 병렬로 호출하면 안되는 Reactive Streams 규칙을 위반하기 때문입니다.

- 결과적으로 익명 구현은 Publisher 호출 내에서 직접 선언 된 경우에만 적합합니다.

 

SampleSubscriber 예시

BaseSubscriber는 subscriber의 행동을 대신하는 훅을 제공한다

무제한 요청을 트리거하고 subscribe() 와 같이 작동함

BaseSubscriber 상속은 요청량을 조절하는데 매우 유용하다

SampleSubscriber<Integer> ss = new SampleSubscriber<Integer>();
Flux<Integer> ints = Flux.range(1, 4);
ints.subscribe(i -> System.out.println(i),
        error -> System.err.println("Error " + error),
        () -> {System.out.println("Done");},
        s -> s.request(10));
ints.subscribe(ss);

// SampleSubscriber
public class SampleSubscriber<T> extends BaseSubscriber<T> {

    public void hookOnSubscribe(Subscription subscription) {
        System.out.println("Subscribed");
        request(1);
    }

    public void hookOnNext(T value) {
        System.out.println(value);
        request(1);
    }
}

 

'JAVA > Reactor' 카테고리의 다른 글

비동기 멀티 스레드 생성  (0) 2020.06.08
프로그래밍 방식의 시퀀스 생성  (0) 2020.06.04
배압과 요청 재구성 방법  (0) 2020.06.04
Flux, Mono 생성 후 Subscribe  (0) 2020.06.04
React 정리  (0) 2020.06.04