반응형

이전 글: 2022.03.22 - [개발/reactive] - [reactive] 8. webflux

 

[reactive] 8. webflux

이전 글: 2022.03.21 - [분류 전체보기] - [reactive] 7. CompletableFuture [reactive] 7. CompletableFuture 이전 글: 2022.03.21 - [개발/reactive] - [reactive] 6. refactoring [reactive] 6. refactoring..

bangpurin.tistory.com

 

 

mono

//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

+ Recent posts