반응형
이전 글: 2022.03.22 - [개발/reactive] - [reactive] 8. webflux
//publisher -> publisher ... -> subscriber 시 실행
m = mono
.just(genHello()) //미리 준비하는.. 그 안의 함수도 미리 실행해서 준비해둠 genHello -> mono
.fromSupplier(()-> genHello()) //mono -> genHello 람다식을 던져야 함수가 그 때 실행해
//(==) 람다식의 의미는 아래와 같음
.fromSupplier(new Supplier<String>(){
public String get(){
return genHello()
}
})
m.subscribe();
log.info("pos2")
return m; //spring 이 subscribe
위 처럼 subscribe가 중간에 있다면 어떻게 실행될까
: 두 번 실행됨
subscribe -> pos2 -> subscribe
같은 내용이라 두 번 실행을 막고 싶으면,
m.subscribe 내용을 따로 담고 그 내용을 Mono.just로 감싸서 return 하면 됨
모노 컨테이너 안의 데이터를 빼야겠어
= mono.block
block 내부에서 subscribe가 실행되면서 내용을 꺼냄
hot publisher vs cold publisher
- cold는 replay 데이터를 처음부터 다시 생성해줌
- hot은 구독하는 시점부터 데이터를 줌; 처음부터 주는거 아님
subscribe vs block?
- subscribe은 스케줄러(쓰레드 모드) 설정에 따라서 블록을 할 수도, 안 할 수도 있음. 결과는 람다식으로 받기 때문에 반드시 블록하지 않아도 됨.
- 반면에 block은 결과를 람다식에서 콜백으로 받는 게 아니라, 값을 꺼내서 변수 등으로 넘겨야하기 때문에 해당 쓰레드는 블록됨.
728x90
반응형
'개발 > reactive' 카테고리의 다른 글
[spring] spring-web and spring-webflux (0) | 2022.03.25 |
---|---|
[reactive] 10. Flux (0) | 2022.03.25 |
[reactive] 8. webflux (0) | 2022.03.22 |
[reactive] 7. CompletableFuture (0) | 2022.03.21 |
[reactive] 6. refactoring (0) | 2022.03.21 |