HelloWorldWorkflowDistributed-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.

HelloWorldWorkflowDistributed-Anwendung

Mit HelloWorldWorkflow und HelloWorldWorkflowAsync vermittelt Amazon SWF die Interaktion zwischen Workflow- und Activity-Implementierungen, aber sie laufen lokal als ein einziger Prozess.GreeterMainbefindet sich in einem separaten Prozess, läuft aber immer noch auf demselben System.

Ein wesentlicher Vorgang von Amazon SWF ist die Unterstützung verteilter Anwendungen. Sie könnten beispielsweise den Workflow-Worker auf einer Amazon EC2 EC2--Instance, den Workflow-Starter auf einem Computer eines Rechenzentrums und die Aktivitäten auf einem Client-Desktopcomputer ausführen. Sie können sogar unterschiedliche Aktivitäten auf unterschiedlichen Systemen ausführen.

Die HelloWorldWorkflowDistributed-Anwendung erweitert HelloWorldWorkflowAsync, um die Anwendung auf zwei Systeme und drei Prozesse zu verteilen.

  • Der Workflow und der Workflow-Starter werden als getrennte Prozesse auf einem System ausgeführt.

  • Die Aktivitäten werden auf einem getrennten System ausgeführt.

Um die Anwendung zu implementieren, erstellen Sie eine Kopie des helloWorld.HelloWorldWorkflowAsync-Pakets in Ihrem Projektverzeichnis und nennen Sie sie helloWorld.HelloWorldWorkflowDistributed. Die folgenden Abschnitte beschreiben die Änderung des ursprünglichen HelloWorldWorkflowAsync-Codes, um die Anwendung auf zwei Systeme und drei Prozesse zu verteilen.

Sie müssen den Workflow oder das Implementieren der Aktivitäten nicht ändern, um sie auf getrennten Systemen auszuführen, auch nicht die Versionsnummern. Sie müssen GreeterMain auch nicht ändern. Sie müssen lediglich den Aktivitäten- und Workflow-Host ändern.

Mit HelloWorldWorkflowAsync dient ein einzelner Anwendungsserver als Workflow- und Aktivitäten-Host. Um den Workflow und das Implementieren der Aktivitäten auf getrennten Systemen auszuführen, müssen Sie getrennte Anwendungen implementieren. Löschen Sie GreeterWorker aus dem Projekt und fügen Sie zwei neue Klassendateien hinzu, GreeterWorkflowWorker und GreeterActivitiesWorker.

HelloWorldWorkflowDistributed implementiert seinen Aktivitäten-Host in GreeterActivitiesWorker wie folgt:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.ActivityWorker; public class GreeterActivitiesWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); } }

HelloWorldWorkflowDistributed implementiert seinen Workflow-Host in GreeterWorkflowWorker wie folgt:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.WorkflowWorker; public class GreeterWorkflowWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; WorkflowWorker wfw = new WorkflowWorker(service, domain, taskListToPoll); wfw.addWorkflowImplementationType(GreeterWorkflowImpl.class); wfw.start(); } }

Beachten Sie, dass GreeterActivitiesWorker nur GreeterWorker ohne den WorkflowWorker-Code ist und GreeterWorkflowWorker nur GreeterWorker ohne den ActivityWorker-Code ist.

So führen Sie den Workflow aus:
  1. Erstellen Sie eine ausführbare JAR-Datei mit GreeterActivitiesWorker als Eingangspunkt.

  2. Kopieren Sie die JAR-Datei aus Schritt 1 in ein anderes System, das jedes von Java unterstütztes Betriebssystem ausführen kann.

  3. Stellen Sie sicher,AWSAnmeldeinformationen mit Zugriff auf dieselbe Amazon SWF-Domäne werden auf dem anderen System verfügbar gemacht.

  4. Führen Sie die JAR-Datei aus.

  5. Verwenden Sie auf Ihrem Entwicklungssystem Eclipse zum Ausführen von GreeterWorkflowWorker und GreeterMain.

Abgesehen davon, dass die Aktivitäten auf einem anderen System als der Workflow-Worker und der Workflow-Starter ausgeführt werden, arbeitet der Workflow genauso wie HelloWorldAsync. Weil jedochprintlnnenne das druckt „Hello World!“ zur Konsole befindet sich imsay-Aktivität erscheint die Ausgabe auf dem System, auf dem der Aktivitäts-Worker ausgeführt wird.