web-dev-qa-db-ja.com

リアクティブストリームのモノとフラックス

ドキュメントに従って:

Fluxは0..N個の要素を放出できるストリームです:

Flux<String> fl = Flux.just("a", "b", "c");

Monoは0..1要素のストリームです:

Mono<String> mn = Mono.just("hello");

そして、どちらもリアクティブストリームでのPublisherインターフェイスの実装です。

ほとんどの場合、Fluxのみを使用して、0..1も放出できるため、Monoの条件を満たすことはできませんか?

または、Monoのみを使用する必要があり、Fluxが操作を処理できない特定の条件がありますか?提案してください。

26
KayV

多くの場合、何らかの計算を行っているか、サービスを呼び出していますが、複数の結果を含む可能性のあるコレクションではなく、正確に1つの結果(またはゼロまたは1つの結果)を期待しています。このような場合、Monoを使用する方が便利です。

これを「通常の」Javaと比較してください。0個または1個の結果を返すメソッドの戻り型としてListを使用しないでください。代わりにOptionalを使用すると、複数の結果が予期されないことがすぐにわかります。

26
Jesper

FluxはRxJava Observableと同等です。
-0個以上のアイテム(多くの要素のストリーム)
-次にオプションでまたはに失敗

Monoは最大で1つのアイテムしか放出できません(1つの要素をストリームします)

関係:

  • 2つのモノを連結すると、フラックスが得られます
  • Fluxでsingle()を呼び出してMonoを返すことができます
21
MagGGG

ドキュメントから こちら

この区別は、非同期処理の大まかなカーディナリティを示す、セマンティック情報の一部をタイプに運びます。たとえば、HTTP要求は1つの応答のみを生成するため、カウント操作を実行してもあまり意味がありません。したがって、このようなHTTP呼び出しの結果をMonoとして表現することは、Fluxとして表現するよりも理にかなっています。ゼロアイテムまたは1アイテムのコンテキストに関連する演算子のみを提供するためです。

2
pvpkiran