View a markdown version of this page

HelloWorldWorkflowParallel Bewerbung - 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 Bewerbung

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 davon HelloWorldWorkflow , die eine parallele Topologie verwendet, wie in der folgenden Abbildung dargestellt.

HelloWorldWorkflowParallel Workflow-Topologie

Mit HelloWorldWorkflowParallel getName und parallel getGreeting ausführen und jeweils einen Teil der Begrüßung zurückgeben. sayfügt dann die beiden Zeichenketten zu einer Begrüßung zusammen und druckt sie auf der Konsole aus.

Um die Anwendung zu implementieren, erstellen Sie eine Kopie des World.HelloWorldWorkflow Hello-Pakets in Ihrem Projektverzeichnis und nennen Sie es helloWorld.HelloWorldWorkflowParallel. In den folgenden Abschnitten wird beschrieben, wie Sie den HelloWorldWorkflow Originalcode so ändern, dass er getGreeting parallel ausgeführt getName wird.

HelloWorldWorkflowParallel Aktivitäten: Arbeiter

Die HelloWorldWorkflowParallel Aktivitätenschnittstelle ist in implementiertGreeterActivities, 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 HelloWorldWorkflow, mit den 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 wie folgt inGreeterActivitiesImpl:

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-Mitarbeiter

Die HelloWorldWorkflowParallel Workflow-Schnittstelle ist wie folgt implementiert: GreeterWorkflow

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, mit der Ausnahme, dass die Versionsnummer so geändert wurde, dass sie mit dem Aktivitäten-Worker übereinstimmt.

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 sieht diese Implementierung den drei Aktivitäten HelloWorldWorkflow, die Client-Methoden nacheinander ausführen, sehr ähnlich. die Aktivitäten jedoch nicht.

  • HelloWorldWorkflow weitergegeben name angetGreeting. 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 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 kein spezieller Modellierungscode verwendet wird, um die Workflow-Topologie zu definieren. Es tut dies implizit, indem es die Standard-Java-Flusskontrolle verwendet und die Eigenschaften von Promise<T> Objekten nutzt. AWS Flow Framework für Java-Anwendungen können selbst komplexe Topologien einfach durch die Verwendung von Promise<T> Objekten in Verbindung mit herkömmlichen Java-Kontrollflusskonstrukten implementiert werden.

HelloWorldWorkflowParallel Host und Starter für Arbeitsabläufe und Aktivitäten

HelloWorldWorkflowParallel implementiert GreeterWorker als Hostklasse für die Workflow- und Aktivitätsimplementierungen. Sie ist bis auf den taskListToPoll Namen, der auf "HelloWorldParallelList“ gesetzt ist, identisch mit der HelloWorldWorkflow Implementierung.

HelloWorldWorkflowParallelimplementiert den GreeterMain Workflow-Starter in und er ist identisch mit der HelloWorldWorkflow Implementierung.

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