Publisher
: 데이터를 만들어 통지하는 생산자Subscriber
: 데이터를 받아 처리하는 소비자Publisher
와 Subscriber
는 아래 4개의 프로토콜로 데이터를 통지함
onSubscribe
: 데이터 통지가 준비됐음을 통지onNext
: 데이터 통지onError
: 에러(이상 종료) 통지onComplete
: 완료(정상 종료) 통지[이미지 1] reactive-streams-1.0.3.jar 내 인터페이스
Publisher
: 데이터를 생성하고 통지package org.reactivestreams;
public interface Publisher<T> {
public void subscribe(Subscriber<? super T> s);
}
Subscriber
: 통지된 데이터를 전달받아 처리package org.reactivestreams;
public interface Subscriber<T> {
public void onSubscribe(Subscription s);
public void onNext(T t);
public void onError(Throwable t);
public void onComplete();
}
Subscription
: 데이터 개수를 요청하고 구독을 해지package org.reactivestreams;
public interface Subscription {
public void request(long n);
public void cancel();
}
Processor
: Publisher
와 Subscriber
의 기능이 모두 존재하는 인터페이스package org.reactivestreams;
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> { }
Reactive Streams는 위의 인터페이스로 데이터를 통지하는 구조를 제공하는데, 이 구조가 정상적으로 작동하려면 Reactive Streams의 규칙을 준수해야 함
NULL
을 통지하지 않음Publisher
의 처리는 완료(onComplete) 또는 에러(onError)를 통지해 종료Subscription
의 추가 규칙Long.MAX_VALUE
를 설정하면 데이터 개수에 의한 통지 제한은 없어짐Subscription
의 메서드는 동기화된 상태로 호출되어야 함, 메서드를 동시에 호출해서는 안됨보다 세부적인 규칙이 많지만 위의 규칙에 따라 구현할 경우 자동으로 지켜지며, 자세한 규칙은 아래 링크를 통해 확인이 가능하다.
(참고 : reactive-streams-jvm/README.md)
리액티브 시스템이란 메시지를 보내 데이터를 처리하고 상황에 따라 스케일 아웃과 스케일 인을 자동으로 수행해 장애 내성을 높임으로써 항상 빠르게 응답할 수 있는 시스템을 말한다.