77 votes

Mono vs Flux dans un flux réactif

Selon les documents:

Flux est un flux qui peut émettre 0..N éléments:

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

Mono est un courant de 0..1 éléments:

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

Et comme les deux sont les implémentations de l'Éditeur de l'interface dans le réactif de flux.

Ne pouvons-nous pas utiliser uniquement le Flux dans la plupart des cas, il peut également émettre 0..1, satisfaisant ainsi les conditions d'un Mono?

Ou il y a certaines conditions lors de la Mono doit être utilisé et le Flux ne peut pas gérer les opérations? S'il vous plaît suggérer.

77voto

Jesper Points 65733

Dans de nombreux cas, vous faites le calcul, ou en appelant le service et que vous attendez exactement un résultat (ou peut-être zéro ou un résultat), et non pas une collection qui contient éventuellement des résultats multiples. Dans de tels cas, il est plus commode d'avoir un Mono.

La comparer à la "régulière" Java: vous ne devez pas utiliser List que le type de retour de la méthode, qui peut revenir à zéro ou à un résultat. Vous utiliserez Optional au lieu de cela, ce qui le rend tout à fait clair que vous ne vous attendez pas plus d'un résultat.

37voto

MagGGG Points 5386

Flux est équivalent à RxJava Observable est capable d'émettre
- zéro ou plusieurs éléments (flux de nombreux éléments)
- puis FACULTATIVEMENT , complétant OU échouant

Mono ne peut émettre qu'un élément au maximum (diffuse un élément)

Rapports:

  • Si vous concatente deux Monos vous obtiendrez un Flux
  • Vous pouvez appeler single () sur Flux pour retourner un Mono

7voto

pvpkiran Points 12077

À partir de la documentation ici

Cette distinction un peu de sémantique de l'information dans le type, indiquant la rudesse de la cardinalité du traitement asynchrone. Par exemple, une requête HTTP ne produit qu'une seule réponse, donc il n'y a pas beaucoup de sens de faire un décompte de l'opération. Exprimer le résultat d'un appel HTTP comme un Mono donc plus de sens que de l'exprimer comme un Flux, il propose des uniquement les opérateurs qui sont pertinents à un contexte de zéro éléments ou un élément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X