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.
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
angetGreeting
. Daname
einPromise<T>
-Objekt ist, verschiebtgetGreeting
die Ausführung der Aktivität, bisgetName
abgeschlossen ist. Daher werden die beiden Aktivitäten nacheinander ausgeführt. -
HelloWorldWorkflowParallel übergibt keine Eingabe an
getName
odergetGreeting
. 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.