web-dev-qa-db-fra.com

Mono vs Flux dans le flux réactif

Selon la documentation:

Flux est un flux pouvant émettre des éléments 0..N:

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

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

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

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

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

Ou il existe certaines conditions spécifiques lorsque seul Mono doit être utilisé et que Flux ne peut pas gérer les opérations? Veuillez suggérer.

26
KayV

Dans de nombreux cas, vous effectuez des calculs ou appelez un service et vous attendez exactement un résultat (ou peut-être zéro ou un résultat), et non une collection contenant éventuellement plusieurs résultats. Dans de tels cas, il est plus pratique d’avoir un Mono.

Comparez-le à Java "normal": vous n'utiliseriez pas List comme type de retour d'une méthode pouvant renvoyer zéro ou un résultat. Vous utiliseriez plutôt Optional, ce qui indique immédiatement que vous ne vous attendez pas à plus d'un résultat.

26
Jesper

Flux est équivalent à RxJava Observable est capable d'émettre
- zéro ou plusieurs éléments (flux de nombreux éléments)
- et ensuite ÉVENTUELLEMENT , complétant OU en échec

Mono ne peut émettre qu'un seul é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 renvoyer un fichier Mono.
21
MagGGG

De la documentation ici

Cette distinction transporte un peu d'informations sémantiques dans le type, indiquant la cardinalité approximative du traitement asynchrone. Par exemple, une requête HTTP ne produit qu'une seule réponse, il est donc peu judicieux d'effectuer une opération de comptage. Exprimer le résultat d'un tel appel HTTP en tant que Mono a donc plus de sens que de l'exprimer en tant que Flux, car il ne propose que des opérateurs pertinents pour un contexte d'éléments nuls ou d'un élément.

2
pvpkiran