반응형
구독자가 새로 생기면 항상 데이터의 처음부터 끝까지 발행한다. 최근 구독자는 예전 구독자들이 받은 데이터들까지 받게 된다. 이거 위험하다. 데이터량이 엄청나면.... 다 받으니 메모리 문제가 일어나니까 조심해야 됨.
대략 RxJava 예)
ReplaySubject<String> subject = ReplaySubject.create();
subject.subscribe(data -> System.out.println(("Subscriber 1# => "+ data)));
int value = 0;
for(int i=0 ; i < 100 ; i++){
value++;
subject.onNext("D " + value);
}
subject.subscribe(data -> System.out.println(("Subscriber 2# => "+ data)));
// 만약 value 가 엄청난 용량의 데이터라면? 문제임...
subject.onNext("D " + value+1);
subject.onComplete();
스프링 WebFlux에도 있을까? 문서를 찾아보니 있다... 정말 많이 사용하지 않나보다.
누군가 스택오버플로우에 이런 질문을 했다.
ㅎㅎ.
ReplayFlux<> 그럴듯하지만.. 없다.
https://projectreactor.io/docs/core/release/api/index.html
해당 문서로 들어가서 Replay를 조회하니. 마블다이어그램과 Class가 나온다.
ReplayProcessor<String> re = ReplayProcessor.create();
re.subscribe(data -> System.out.println("Spring ReplayProcessor 1# : " + data));
int infDataInt = 0;
for(int i=0 ; i < 10 ; i++){
infDataInt++;
re.onNext("D " + infDataInt);
}
re.onNext("Spring WebFlux Data " + infDataInt);
re.subscribe(data -> System.out.println("Spring ReplayProcessor 2# : " + data));
re.onNext("D " + infDataInt+1);
re.onComplete();
스프링 WebFlux 버전으로 만들어 보고.
테스트 결과 두번째 구독자가 구독을 하게 되면 아래 처럼 발행되었던 모든 데이터를 다시 받을 수 있다.
반응형
'슬기로운 자바 개발자 생활 > 스프링 및 자바웹 서비스' 카테고리의 다른 글
콜백헬... CallBack Hell이란? (0) | 2022.11.18 |
---|---|
JPA 스프링 부트, 마리아디비, 간단예제(Spring Boot and JPA, MariaDB) (0) | 2022.11.18 |
slf4j 설정. (0) | 2022.06.21 |
나는 공부 중 Reactive Streams 첫 번째 (0) | 2022.04.27 |
RestTemplate Rest Api 호출해보기 (0) | 2021.12.08 |
댓글