Applicazione HelloWorldWorkflowParallel - AWS Flow Framework per Java

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Applicazione HelloWorldWorkflowParallel

Le versioni precedenti di Hello World! tutti utilizzare un flusso di lavoro lineare topologia. Tuttavia, Amazon SWF non si limita alle topologie lineari. L'applicazione HelloWorldWorkflowParallel è una versione modificata di HelloWorldWorkflow che utilizza una topologia parallela, come illustrato nella figura seguente.

Topologia di flusso di lavoro parallela di HelloWorldWorkflowParallel

Con HelloWorldWorkflowParallel, le stringhe getName e getGreeting sono eseguite in parallelo e ognuna restituisce una parte della formula di apertura. say genera quindi la formula di apertura unendo le due stringhe e la stampa sulla console.

Per implementare l'applicazione, crea una copia del pacchetto helloWorld.HelloWorldWorkflow nella directory del progetto e denominala helloWorld.HelloWorldWorkflowParallel. Nelle sezioni seguenti viene descritto come modificare il codice HelloWorldWorkflow originale per eseguire getName e getGreeting in parallelo.

Lavoratore di attività di HelloWorldWorkflowParallel

L'interfaccia di attività HelloWorldWorkflowParallel è implementata in GreeterActivities, come mostrato nell'esempio seguente.

import com.amazonaws.services.simpleworkflow.flow.annotations.Activities; import com.amazonaws.services.simpleworkflow.flow.annotations.ActivityRegistrationOptions; @Activities(version="5.0") @ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 10) public interface GreeterActivities { public String getName(); public String getGreeting(); public void say(String greeting, String name); }

L'interfaccia è simile a HelloWorldWorkflow, con le seguenti eccezioni:

  • getGreeting non accetta alcun input, ma restituisce semplicemente una stringa di formula di apertura.

  • say accetta due stringhe di input, la formula di apertura e il nome.

  • L'interfaccia ha un nuovo numero di versione, necessario ogni volta che modifichi un'interfaccia registrata.

HelloWorldWorkflowParallel implementa le attività in GreeterActivitiesImpl, come mostrato di seguito:

public class GreeterActivitiesImpl implements GreeterActivities { @Override public String getName() { return "World!"; } @Override public String getGreeting() { return "Hello "; } @Override public void say(String greeting, String name) { System.out.println(greeting + name); } }

Ora getName e getGreeting restituiscono semplicemente metà della stringa di formula di apertura. say concatena le due parti per generare la frase completa e la stampa sulla console.

Lavoratore di flusso di lavoro di HelloWorldWorkflowParallel

L'interfaccia di flusso di lavoro di HelloWorldWorkflowParallel è implementata in GreeterWorkflow, come mostrato di seguito:

import com.amazonaws.services.simpleworkflow.flow.annotations.Execute; import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow; import com.amazonaws.services.simpleworkflow.flow.annotations.WorkflowRegistrationOptions; @Workflow @WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 3600) public interface GreeterWorkflow { @Execute(version = "5.0") public void greet(); }

La classe è identica alla versione HelloWorldWorkflow, salvo che il numero di versione è stato modificato per corrispondere al lavoratore di attività.

Il flusso di lavoro è implementato in GreeterWorkflowImpl, come mostrato di seguito:

import com.amazonaws.services.simpleworkflow.flow.core.Promise; public class GreeterWorkflowImpl implements GreeterWorkflow { private GreeterActivitiesClient operations = new GreeterActivitiesClientImpl(); public void greet() { Promise<String> name = operations.getName(); Promise<String> greeting = operations.getGreeting(); operations.say(greeting, name); } }

A prima vista, questa implementazione sembra molto simile a HelloWorldWorkflow; i tre metodi di client di attività sono eseguiti in sequenza. Tuttavia, ciò non avviene per le attività.

  • HelloWorldWorkflow ha passato name a getGreeting. Poiché name era un oggetto Promise<T>, getGreeting ha posticipato l'esecuzione dell'attività fino al completamento di getName e le due attività sono state eseguite in sequenza.

  • HelloWorldWorkflowParallel non passa alcun getName o getGreeting di input. Nessuno dei due metodi posticipa l'esecuzione e i metodi di attività associati sono eseguiti immediatamente e in parallelo.

L'attività say accetta greeting e name come parametri di input. Poiché sono oggetti Promise<T>, say posticipa l'esecuzione fino al completamento di entrambe le attività e quindi costruisce e stampa la formula di apertura.

Nota che HelloWorldWorkflowParallel non utilizza alcun codice di modellazione speciale per definire la topologia di flusso di lavoro. Eseguisce questa opzione in modo implicito utilizzando il controllo di flusso Java standard e le proprietà diPromise<T>oggetti.AWS Flow Frameworkper le applicazioni Java è possibile implementare anche topologie complesse semplicemente utilizzandoPromise<T>oggetti in combinazione con i tradizionali costrutti di flusso di controllo Java.

Starter e host di flusso di lavoro e di attività di HelloWorldWorkflowParallel

HelloWorldWorkflowParallel implementa GreeterWorker come classe host per le implementazioni di flusso di lavoro e attività. È identica all'implementazione di HelloWorldWorkflow ad eccezione del nome taskListToPoll, che è impostato su "HelloWorldParallelList".

HelloWorldWorkflowParallel implementa lo starter di flusso di lavoro in GreeterMain ed è identica all'implementazione di HelloWorldWorkflow.

Per eseguire il flusso di lavoro, esegui GreeterWorker e GreeterMain esattamente come con HelloWorldWorkflow.