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à.
HelloWorldWorkflowParallel Applicazione
Le versioni precedenti di Hello World! tutti utilizzare un flusso di lavoro lineare topologia. Tuttavia, Amazon SWF non si limita alle topologie lineari. L' HelloWorldWorkflowParallel applicazione è una versione modificata HelloWorldWorkflow che utilizza una topologia parallela, come mostrato nella figura seguente.
Con getName ed HelloWorldWorkflowParallel getGreeting esegui in parallelo e ognuno restituisce una parte del saluto. sayquindi unisce le due stringhe in un saluto e lo stampa sulla console.
Per implementare l'applicazione, create una copia del World.HelloWorldWorkflow pacchetto hello nella directory del progetto e denominatela hello. World.HelloWorldWorkflowParallel Le sezioni seguenti descrivono come modificare il HelloWorldWorkflow codice originale per l'esecuzione getName e getGreeting in parallelo.
HelloWorldWorkflowParallel Addetto alle attività
L'interfaccia HelloWorldWorkflowParallel delle attività è implementata inGreeterActivities, 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:
-
getGreetingnon accetta alcun input, ma restituisce semplicemente una stringa di formula di apertura. -
sayaccetta 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à inGreeterActivitiesImpl, come segue:
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.
HelloWorldWorkflowParallel Workflow Worker
L'interfaccia del HelloWorldWorkflowParallel flusso di lavoro è implementata inGreeterWorkflow, come segue:
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 HelloWorldWorkflow versione, tranne per il fatto che il numero di versione è stato modificato per corrispondere all'operatore delle 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 è molto simile a HelloWorldWorkflow: le tre attività che i metodi client eseguono in sequenza. Tuttavia, ciò non avviene per le attività.
-
HelloWorldWorkflow passato
nameagetGreeting. Poichénameera un oggettoPromise<T>,getGreetingha posticipato l'esecuzione dell'attività fino al completamento digetNamee le due attività sono state eseguite in sequenza. -
HelloWorldWorkflowParallel non trasmette alcun input
getNameogetGreeting. 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.
Si noti che HelloWorldWorkflowParallel non utilizza alcun codice di modellazione speciale per definire la topologia del flusso di lavoro. Lo fa implicitamente utilizzando il controllo del flusso Java standard e sfruttando le proprietà degli Promise<T> oggetti. AWS Flow Framework per le applicazioni Java è in grado di implementare anche topologie complesse semplicemente utilizzando Promise<T> oggetti in combinazione con i tradizionali costrutti di controllo del flusso di controllo Java.
HelloWorldWorkflowParallel Flusso di lavoro e attività Host e Starter
HelloWorldWorkflowParallel implementa GreeterWorker come classe host per le implementazioni del flusso di lavoro e delle attività. È identica all' HelloWorldWorkflow implementazione tranne per il taskListToPoll nome, che è impostato su "». HelloWorldParallelList
HelloWorldWorkflowParallelimplementa il workflow starter in GreeterMain ed è identico all' HelloWorldWorkflow implementazione.
Per eseguire il flusso di lavoro, esegui GreeterWorker e GreeterMain esattamente come con HelloWorldWorkflow.