chrysimo / muskel2

muskel2
2 stars 1 forks source link

Muskel2

Muskel2 è una libreria Java per il calcolo distribuito che implementa le specifiche Reactive Streams (http://www.reactive-streams.org/).

Requisiti:

Features

Esempi di utilizzo

A partire da una lista di profili utente presente localmente si vuol effettuare la generazione della Thumbnail su uno specifico insieme di nodi "imageProcessorNodeGroup" e passare il risultati al gruppo di server responsabile per la loro memorizzazione "storeImageNodeGroup". In questo caso il programma non torna alcun controllo all'utente finale.

MuskelProcessor.fromIterable(dao.getUserProfiles())
              .executeOn(buildRemote("imageProcessorNodeGroup"))
          .map(userProfile -> thumbnailService.generateThumbnail(userProfile))
          .executeOn(buildRemote("storeImageNodeGroup"))
          .subscribe(profileImage -> {          
                    //Salva immagine 
                });

Oppure supponendo che il dao contenente la lista dei profili utenti si trovi su un server remoto, è possibile invocare l'operazione sul server ed ottenere il risultato in locale.

List<Thumbnail> thumbnails = MuskelProcessor
   .executeOn(() -> MuskelProcessor.fromIterable(dao.getUserProfiles())
   .map(userProfile -> thumbnailService.generateThumbnail(userProfile)),buildRemote("profileNode"))
.toList().
toBlocking().
getFirst();

Inoltre le funzioni map e flatMap come quelle definite negli Stream di Java 8 possono essere eseguite sia in modo parallelo locale che remoto!

In questo caso la sola funzione map viene eseguita sul gruppo di server specifico

MuskelProcessor.fromIterable(dao.getUserProfiles())
      ....
 .map(userProfile -> thumbnailService.generateThumbnail(userProfile), buildRemote("nodeCalculator"))
          ....
 .subscribe(profileImage -> {           
                    //Salva immagine 
                });