reduce
Réduction des données vers le(s) endpoint(s) cible(s).
Par défaut, l'option de distribution
mddynamics.id
est pré-configurée pour router les messages vers le même endpoint. Elle peut être surchargée pour modifier son comportement, par exemple, grouper les messages sur certains endpoints
Patterns
Load-balancing
Map/Reduce
Usage
public LinkStream reduce(String label, String url, [(LinkStream stream, Event event) -> { <lambda> }],..) throws StreamDefinitionException;
@param
label: libellé de la lambda
@param
url: URL de distribution de la lambda
@param
stream: instance du stream
@param
event: évenement ou message reçu par la lambda
@function
lambda: implémentation de la fonction lambda. Doit retouner un objet sérialisable comme input pour les traitements suivants de l'algorithme. Si la lambda retourne null alors les clauses suivantes ne sont pas exécutées.
Lorsque plusieurs fonctions lambda sont définies, elles sont exécutées séquentiellement sur les mêmes données reçues en entrée et tous les résultats sont transmis vers la clause suivante de l'algorithme (à la façon d'une fonction "JOIN")
caution
Si la lambda retourn un itérable (implémente l'interface java.lang.Iterable) alors chaque élément est transmis en streaming (au fil de l'eau); dans le cas contraire, l'objet entier est transmis vers la clause suivante.
Exemple de code
@Override
public void build() throws Exception {
make("power data collect")
.from("collect", "www.mddynamics.fr/app/data..", (stream, event) -> {
Resource probe = event.resource();
probe.set("label", getProbeLabelFromId());
return probe;
})
// les données de chaque sonde sont routées vers un endpoint dédié à partir de probe.id
.map("data", "www.mddynamics.fr/app/process", (stream, probe) -> {
...
return probe;
})
// exécute un traitement sur l'ensemble des résultats de l'étape précédente
.reduce("sum", "www.mddynamics.fr/app/sum", (stream, probe) -> {
...
return probe;
})
}