1. 개요
이 예제에서는 Reactor Core 라이브러리 의 Flux 와 Mono 의 차이점을 배웁니다 .
2. 모노 란?
Mono 는 Publisher 의 특별한 유형입니다 . 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. 모노 대 유량
Mono 와 Flux 는 모두 Publisher 인터페이스의 구현입니다. 간단히 말해서, 계산과 같은 일을 하거나 데이터베이스 또는 외부 서비스에 요청을 할 때 최대 하나의 결과를 예상할 때 Mono 를 사용해야 한다고 말할 수 있습니다 .
계산, 데이터베이스 또는 외부 서비스 호출에서 여러 결과가 예상되는 경우 Flux 를 사용해야 합니다 .
Mono 는 0 또는 1개의 값을 포함하기 때문에 Java 의 Optional 클래스와 더 관련이 있고 Flux 는 N개의 값을 가질 수 있으므로 List 와 더 관련이 있습니다.
5. 결론
이 기사에서 우리는 Mono 와 Flux 의 차이점을 배웠습니다 .
항상 그렇듯이 예제의 전체 소스 코드는 GitHub에서 사용할 수 있습니다 .