Spring Webflux Reactor - Mono

Mono

Spring Webflux 의 Reactive Stream 를 구현하고 있는 Reactor 는 MonoFlux 이다.

그 중 Mono0 ~ 1 개의 데이터를 전달 하는 역할을 한다.

Mono 인스턴스 생성 방식

Just

Mono just 생성 방식

  • .just() 는 구독하는 순간. 특정 값을 바로 반환 emit 하는 함수이다.
  • 인스턴스화 되는 시점(instantiation time) 에 캡쳐되는 값을 반환한다. (eager 방식과 유사)

Defer

Mono defer 생성 방식

  • .defer()Mono Supplier 를 인자로 받아 구독하는 순간, 해당 Supplier 를 구독하여 emit 하는 함수이다.
  • .just() 와의 차이점은 해당 값이 인스턴스화 되는 시점구독하는 순간 이다.

Callable

Mono callable 생성 방식

  • .fromCallable()Callable Supplier 를 인자로 받아 Mono Supplier 인스턴스를 생성하는 함수이다.
  • 생성된 Mono Supplier 를 구독하는 순간, Callable Supplier 를 통해 단순 값 을 제공받아 emit 한다.

var data = 99;
private fun getData(caller: String): Int {
    println("Called by $caller")
    return data
}

@Test
fun monoInstantiationTest() {
    println("==========================")
    println(getData("HI"))
    println("==========================")

    val just = Mono.just(getData("JUST"))
    val defer = Mono.defer { Mono.just(getData("DEFER")) }
    val callable = Mono.fromCallable { getData("CALLABLE") }

    just.subscribe { println("JUST data : $it") }
    defer.subscribe { println("DEFER data : $it") }
    callable.subscribe { println("CALLABLE data : $it") }

    println("==========================")

    // changed value
    println("Changed value $data -> ${++data}")

    println("==========================")

    just.subscribe { println("JUST data : $it") }
    defer.subscribe { println("DEFER data : $it") }
    callable.subscribe { println("CALLABLE data : $it") }

    println("==========================")
}
==========================
Called by HI
99
==========================
Called by JUST
JUST data : 99
Called by DEFER
DEFER data : 99
Called by CALLABLE
CALLABLE data : 99
==========================
Changed value 99 -> 100
==========================
JUST data : 99
Called by DEFER
DEFER data : 100
Called by CALLABLE
CALLABLE data : 100
==========================

출처