1. 개요

이 예제에서는 Reactor Core 라이브러리 FluxMono 의 차이점을 배웁니다 .

2. 모노 란?

MonoPublisher 의 특별한 유형입니다 . Mono 개체는 단일 또는 빈 값을 나타냅니다 . 즉, onNext()  요청 에 대해 최대 하나의 값만 내 보낸 다음 onComplete() 신호로 종료됩니다. 실패할 경우 단일 onError() 신호만 내보냅니다.

완료 신호가 있는 Mono 의 예를 살펴보겠습니다 .

@Test
public void givenMonoPublisher_whenSubscribeThenReturnSingleValue() {
    Mono<String> helloMono = Mono.just("Hello");
    StepVerifier.create(helloMono)
      .expectNext("Hello")
      .expectComplete()
      .verify();
}

여기에서 helloMono 가 구독되면 하나의 값만 내보낸 다음 완료 신호를 보내는 것을 볼 수 있습니다.

3. 플럭스 란?

Flux 는 0에서 N까지의 비동기 시퀀스 값을 나타내는 표준 게시자 입니다. 이는 0에서 많은 값, 아마도 onNext() 요청에 대해 무한한 값을 내보낸 다음 완료 또는 오류 신호와 함께 종료될 수 있음을 의미합니다.

완료 신호가 있는 Flux 의 예를 살펴보겠습니다 .

@Test
public void givenFluxPublisher_whenSubscribedThenReturnMultipleValues() {
    Flux<String> stringFlux = Flux.just("Hello", "Baeldung");
    StepVerifier.create(stringFlux)
      .expectNext("Hello")
      .expectNext("Baeldung")
      .expectComplete()
      .verify();
}

이제 오류 신호가 있는 Flux 의 예를 살펴보겠습니다 .

@Test
public void givenFluxPublisher_whenSubscribeThenReturnMultipleValuesWithError() {
    Flux<String> stringFlux = Flux.just("Hello", "Baeldung", "Error")
      .map(str -> {
          if (str.equals("Error"))
              throw new RuntimeException("Throwing Error");
          return str;
      });
    StepVerifier.create(stringFlux)
      .expectNext("Hello")
      .expectNext("Baeldung")
      .expectError()
      .verify();
}

Flux 에서 두 개의 값을 가져온 후 오류가 발생하는 것을 여기에서 볼 수 있습니다 .

4. 모노유량

MonoFlux 는 모두 Publisher 인터페이스의 구현입니다. 간단히 말해서, 계산과 같은 일을 하거나 데이터베이스 또는 외부 서비스에 요청을 할 때 최대 하나의 결과를 예상할 때 Mono 를 사용해야 한다고 말할 수 있습니다 .

계산, 데이터베이스 또는 외부 서비스 호출에서 여러 결과가 예상되는 경우 Flux 를 사용해야 합니다 .

Mono0 또는 1개의 값을 포함하기 때문에 Java 의 Optional 클래스와 더 관련이 있고 Flux 는 N개의 값을 가질 수 있으므로 List 와 더 관련이 있습니다.

5. 결론

이 기사에서 우리는 MonoFlux 의 차이점을 배웠습니다 .

항상 그렇듯이 예제의 전체 소스 코드는 GitHub에서 사용할 수 있습니다 .

Generic footer banner