Skip to main content

parallel

"Splite" le stream afin d'exécuter des traitements en parallèle sur plusieurs branches

la clause parallel() stream le flux sur les endpoints cibles et ouvre une nouvelle branche dans la portée courante (clauses from, to, map, reduce)

Patterns

Parallel processing

Usage

interface org.mddynamics.network.stream.LinkStream
public LinkStream parallel(String label, String url, Atomic... atomics) throws StreamDefinitionException;

@param label: libellé de la clause, affichée sur l'arborescence du stream (onglet packages)

@param url: URL de distribution de la fonction lambda

@param atomics: fonction lambda (au moins une requise)

@return retourne l'instance du flux (approche DSL)

@exception Si l'exception StreamDefinitionException est levée la compilation échoue et un message d'erreur s'affiche

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. Cela permet d'exécuter plusieurs traitements logiques distincts et de transmettre les résultats vers la clause suivante de l'algorithme (à la façon d'une fonction "JOIN")

signature d'une fonction lambda Atomic
public Object (LinkStream stream, Event event) -> { return ... }

@param stream: context d'exécution du stream

@param event: payload. L'objet org.mddynamics.network.stream.Event est un wrapper

@return: données transmises en streaming à la clause suivantes de l'algorithme

Il est possible de retourner l'objet Event ou tout autre objet sérialisable. Si l'objet retourné est une instance de java.lang.Iterable alors chaque élément de la liste sera transmis en streaming vers la clause suivante de l'algorithme; 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) -> {
return validData(event);
})
.parallel("computes yield", "www.mddynamics.fr/app/process/yield", (stream, event) -> { return ..;
})
.store("yield", "www.mddynamics.fr/app/store/yield", (stream, event) -> { .. })

.parallel("monitors alerts", "www.mddynamics.fr/app/process/alerts", (stream, event) -> {
return ..;
})
.store("alerts", "www.mddynamics.fr/app/store/alert", (stream, event) -> { .. })
}