HelloWorldWorkflowParallel-Anwendung - AWS Flow Framework für Java

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

HelloWorldWorkflowParallel-Anwendung

In den Vorgängerversionen von Hello World! wird eine lineare Workflow-Topologie verwendet. Amazon SWF ist jedoch nicht auf lineare Topologien beschränkt. Die HelloWorldWorkflowParallel-Anwendung ist eine modifizierte Version von HelloWorldWorkflow mit einer parallelen Topologie, wie in der folgenden Abbildung dargestellt.

HelloWorldWorkflowParallel-Workflow-Topologie​

Mit HelloWorldWorkflowParallel laufen getName und getGreeting parallel und jeder gibt einen Teil der Begrüßung zurück. say fügt dann die beiden Zeichenketten zu einer Begrüßung zusammen und gibt sie in der Konsole aus.

Um die Anwendung zu implementieren, erstellen Sie eine Kopie des helloWorld.HelloWorldWorkflow-Pakets in Ihrem Projektverzeichnis und nennen Sie sie helloWorld.HelloWorldWorkflowParallel. Die folgenden Abschnitte beschreiben die Änderung des ursprünglichen HelloWorldWorkflow-Codes, um getName und getGreeting parallel auszuführen.

HelloWorldWorkflowParallel-Aktivitätsauftragnehmer

Die Aktivitätenschnittstelle von HelloWorldWorkflowParallel wird in GreeterActivities implementiert, wie im folgenden Beispiel gezeigt.

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); }

Die Schnittstelle ähnelt der von HelloWorldWorkflow, allerdings mit folgenden Ausnahmen:

  • getGreeting übernimmt keine Eingabe. Sie gibt nur eine Begrüßungszeichenfolge zurück.

  • say übernimmt zwei Eingabezeichenfolgen, die Begrüßung und den Namen.

  • Die Schnittstelle hat eine neue Versionsnummer. Diese ist bei jeder Änderung an der registrierten Schnittstelle erforderlich.

HelloWorldWorkflowParallel implementiert die Aktivitäten in GreeterActivitiesImpl wie folgt:

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); } }

getName und getGreeting geben nun einfach die Hälfte der Begrüßungszeichenkette zurück. say verkettet die beiden Teile, um die vollständige Zeichenfolge zu erzeugen, und gibt sie auf der Konsole aus.

HelloWorldWorkflowParallel-Workflow-Auftragnehmer

Die Workflow-Schnittstelle von HelloWorldWorkflowParallel wird in GreeterWorkflow wie folgt implementiert:

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(); }

Die Klasse ist mit der HelloWorldWorkflow-Version identisch, abgesehen davon, dass die Versionsnummer an die der Aktivitätenauftragnehmer angepasst wurde.

Der Workflow wird in GreeterWorkflowImpl wie folgt implementiert:

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); } }

Auf den ersten Blick ähnelt die Implementierung sehr HelloWorldWorkflow. Die drei Aktivitäten-Client-Methoden werden nacheinander ausgeführt, die Aktivitäten jedoch nicht.

  • HelloWorldWorkflow übergibt name an getGreeting. Da name ein Promise<T>-Objekt ist, verschiebt getGreeting die Ausführung der Aktivität, bis getName abgeschlossen ist. Daher werden die beiden Aktivitäten nacheinander ausgeführt.

  • HelloWorldWorkflowParallel übergibt keine Eingabe an getName oder getGreeting. Keine der Methoden verschiebt die Ausführung und die zugehörigen Aktivitätsmethoden werden sofort parallel ausgeführt.

Die Aktivität say übernimmt sowohl greeting als auch name als Eingabeparameter. Da es sich dabei um Promise<T>-Objekte handelt, verschiebt say die Ausführung, bis beide Aktivitäten abgeschlossen sind, erstellt dann die Begrüßung und gibt sie aus.

Beachten Sie, dass HelloWorldWorkflowParallel keinen speziellen Modellierungscode zur Definition der Workflow-Topologie verwendet. Dies geschieht implizit durch die Verwendung von Standard-Java-Flusskontrolle und die Nutzung der Eigenschaften vonPromise<T>-Objekte.AWS Flow Frameworkfür Java-Anwendungen können selbst komplexe Topologien einfach mitPromise<T>Objekte in Verbindung mit herkömmlichen Java-Kontrollflusskonstrukten.

HelloWorldWorkflowParallel-Workflow und Aktivitäten-Host und -Starter

HelloWorldWorkflowParallel implementiert GreeterWorker als Host-Klasse für den Workflow und die Implementierungen der Aktivität. Es ist identisch zur HelloWorldWorkflow-Implementierung, mit Ausnahme des taskListToPoll-Namens, der auf "HelloWorldParallelList" festgelegt ist.

HelloWorldWorkflowParallel implementiert den Workflow-Starter in GreeterMain. Es ist identisch zur HelloWorldWorkflow-Implementierung.

Führen Sie zur Ausführung des Workflows GreeterWorker und GreeterMain genau wie bei HelloWorldWorkflow aus.