Entwickeln von Entscheidern in Amazon SWF - Amazon Simple Workflow Service

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.

Entwickeln von Entscheidern in Amazon SWF

Ein Entscheider ist eine Implementierung der Koordinationslogik Ihres Workflow-Typs, die während der Workflow-Ausführung ausgeführt wird. Sie können mehrere Entscheider für einen einzelnen Workflow-Typ ausführen.

Da der Ausführungsstatus einer Workflow-Ausführung im Workflow-Verlauf gespeichert wird, können Entscheider zustandslos sein. Amazon SWF verwaltet den Workflow-Ausführungsverlauf und stellt diesen einem Entscheider bei jeder Entscheidungsaufgabe zur Verfügung. Dadurch können Sie nach Bedarf Entscheider dynamisch hinzufügen oder entfernen. So wird die Verarbeitung Ihrer Workflows in hohem Maße skalierbar. Wenn die Auslastung Ihres Systems wächst, fügen Sie einfach weitere Entscheider hinzu, um die gestiegene Kapazität zu kompensieren. Beachten Sie jedoch, dass bei einer gegebenen Workflow-Ausführung immer nur jeweils eine Entscheidungsaufgabe geöffnet sein kann.

Immer dann, wenn sich der Status einer Workflow-Ausführung ändert, plant Amazon SWF eine Entscheidungsaufgabe. Empfängt ein Entscheider eine Entscheidungsaufgabe, geschieht Folgendes:

  • Er interpretiert den Workflow-Ausführungsverlauf, der mit der Entscheidungsaufgabe bereitgestellt wird.

  • Er wendet die Koordinationslogik basierend auf dem Workflow-Ausführungsverlauf an und entscheidet, was als Nächstes zu tun ist. Jede Entscheidung wird durch eine Entscheidungsstruktur dargestellt.

  • Er schließt die Entscheidungsaufgabe ab und übermittelt Amazon SWF eine Entscheidungsliste.

In diesem Abschnitt wird die Entwicklung eines Entscheiders beschrieben. Dazu gehört:

  • Programmieren des Entscheiders zum Abrufen von Entscheidungsaufgaben

  • Programmieren des Entscheiders zum Interpretieren des Workflow-Ausführungsverlaufs und zum Treffen von Entscheidungen

  • Programmieren des Entscheiders zum Reagieren auf eine Entscheidungsaufgabe

Die Beispiele in diesem Abschnitt zeigen die Programmierung eines Entscheiders für den E-Commerce-Beispiel-Workflow.

Sie können den Entscheider in einer beliebigen Sprache implementieren und überall ausführen, solange dieser mit Amazon SWF über die entsprechende Service-API kommuniziert.

Definieren einer Koordinationslogik

Für die Entwicklung eines Entscheiders ist zunächst einmal das Definieren der Koordinationslogik notwendig. Beim E-Commerce-Beispiel sieht die Koordinationslogik, die jede Aktivität nach Abschluss der vorherigen Aktivität plant, in etwas wie folgt aus:

IF lastEvent = "StartWorkflowInstance" addToDecisions ScheduleVerifyOrderActivity ELSIF lastEvent = "CompleteVerifyOrderActivity" addToDecisions ScheduleChargeCreditCardActivity ELSIF lastEvent = "CompleteChargeCreditCardActivity" addToDecisions ScheduleCompleteShipOrderActivity ELSIF lastEvent = "CompleteShipOrderActivity" addToDecisions ScheduleRecordOrderCompletion ELSIF lastEvent = "CompleteRecordOrderCompletion" addToDecisions CloseWorkflow ENDIF

Der Entscheider wendet die Koordinationslogik auf den Workflow-Ausführungsverlauf an und erstellt eine Liste mit Entscheidungen, wenn die Entscheidungsaufgabe mit der RespondDecisionTaskCompleted-Aktion abgeschlossen wird.

Abrufen von Entscheidungsaufgaben

Jeder Entscheider ruft Entscheidungsaufgaben ab. Jede Entscheidungssaufgabe enthält Informationen anhand derer der Entscheider Entscheidungen, beispielsweise das Planen von Aktivitätsaufgaben, generiert. Der Entscheider ruft Entscheidungen mit der PollForDecisionTask-Aktion ab.

In diesem Beispiel ruf der Entscheider eine Entscheidungsaufgabe ab, die die customerOrderWorkflow-0.1-Aufgabenliste angibt.

https://swf.us-east-1.amazonaws.com PollForDecisionTask { "domain": "867530901", "taskList": {"name": "customerOrderWorkflow-v0.1"}, "identity": "Decider01", "maximumPageSize": 50, "reverseOrder": true }

Ist eine Entscheidungsaufgabe in der angegebenen Aufgabenliste verfügbar, gibt Amazon SWF diese sofort zurück. Ist keine Entscheidungsaufgabe verfügbar, hält Amazon SWF die Verbindung für bis zu 60 Sekunden und gibt eine Aufgabe zurück, sobald diese verfügbar ist. Steht keine Aufgabe zur Verfügung, gibt Amazon SWF eine leere Antwort zurück. Eine leere Antwort ist eine Task-Struktur, in der der Wert von taskToken eine leere Zeichenfolge ist. Stellen Sie sicher, dass Ihr Entscheider so programmiert ist, dass er bei einer leeren Antwort eine neue Aufgabe abruft.

Ist eine Entscheidungsaufgabe verfügbar, gibt Amazon SWF eine Antwort zurück, die die Entscheidungsaufgabe enthält sowie eine paginierte Ansicht des Workflow-Ausführungsverlaufs.

In diesem Beispiel gibt der Typ des letzten Ereignisses an, dass die Workflow-Ausführung gestartet wurde. Das Eingabeelement enthält die für die Ausführung der ersten Aufgabe notwendigen Informationen.

{ "events": [ { "decisionTaskStartedEventAttributes": { "identity": "Decider01", "scheduledEventId": 2 }, "eventId": 3, "eventTimestamp": 1326593394.566, "eventType": "DecisionTaskStarted" }, { "decisionTaskScheduledEventAttributes": { "startToCloseTimeout": "600", "taskList": { "name": "specialTaskList" } }, "eventId": 2, "eventTimestamp": 1326592619.474, "eventType": "DecisionTaskScheduled" }, { "eventId": 1, "eventTimestamp": 1326592619.474, "eventType": "WorkflowExecutionStarted", "workflowExecutionStartedEventAttributes": { "childPolicy" : "TERMINATE", "executionStartToCloseTimeout" : "3600", "input" : "data-used-decider-for-first-task", "parentInitiatedEventId": 0, "tagList" : ["music purchase", "digital", "ricoh-the-dog"], "taskList": { "name": "specialTaskList" }, "taskStartToCloseTimeout": "600", "workflowType": { "name": "customerOrderWorkflow", "version": "1.0" } } } ], ... }

Nach dem Erhalt des Workflow-Ausführungsverlaufs interpretiert der Entscheider den Verlauf und trifft basierend auf seiner Koordinationslogik Entscheidungen.

Da die Anzahl der Workflow-Verlaufsereignisse für eine einzelne Workflow-Ausführung möglicherweise hoch ist, wird das zurückgegebene Ergebnis möglicherweise auf mehrere Seiten umgebrochen. Zum Abrufen nachfolgender Seiten rufen Sie PollForDecisionTask mehrmals mit dem vom ursprünglichen Aufruf zurückgelieferten nextPageToken auf. Beachten Sie, dass Sie nicht GetWorkflowExecutionHistory mit diesem nextPageToken aufrufen. Rufen Sie stattdessen PollForDecisionTask erneut auf.

Anwenden der Koordinationslogik

Sie müssen den Entscheider so programmieren, dass er, nachdem er eine Entscheidungsaufgabe empfangen hat, den Workflow-Ausführungsverlauf interpretiert, um festzustellen, was bisher geschehen ist. Anhand dieser Informationen sollte er dann eine Liste von Entscheidungen generieren.

Beim E-Commerce-Beispiel geht es primär um das letzte Ereignis im Workflow-Verlauf. Deshalb definieren wir die folgende Logik.

IF lastEvent = "StartWorkflowInstance" addToDecisions ScheduleVerifyOrderActivity ELSIF lastEvent = "CompleteVerifyOrderActivity" addToDecisions ScheduleChargeCreditCardActivity ELSIF lastEvent = "CompleteChargeCreditCardActivity" addToDecisions ScheduleCompleteShipOrderActivity ELSIF lastEvent = "CompleteShipOrderActivity" addToDecisions ScheduleRecordOrderCompletion ELSIF lastEvent = "CompleteRecordOrderCompletion" addToDecisions CloseWorkflow ENDIF

Ist das lastEvent eine CompleteVerifyOrderActivity-Aktivität, fügen Sie die ScheduleChargeCreditCardActivity-Aktivität zur Liste der Entscheidungen hinzu.

Nachdem der Entscheider die zu treffenden Entscheidungen ermittelt hat, kann dieser Amazon SWF mit entsprechenden Entscheidungen antworten.

Reagieren auf Entscheidungen

Nach dem Interpretieren des Workflow-Verlaufs und dem Generieren einer Entscheidungsliste, ist der Entscheider bereit, mit diesen Entscheidungen an Amazon SWF zu antworten.

Programmieren Sie den Entscheider so, dass er die benötigten Daten aus dem Workflow-Ausführungsverlauf extrahieren kann. Erstellen Sie dann Entscheidungen, die die nächsten passenden Aktionen für den Workflow angeben. Der Entscheider kommuniziert diese Amazon SWF demRespondDecisionTaskCompletedAktion Sehen Sie sich dieAmazon Simple Workflow Service API-ReferenzFür eine Liste der verfügbarenEntscheidungstypenaus.

Wenn der Entscheider im E-Commerce-Beispiel mit einer Reihe von Entscheidungen reagiert, die er erzeugt hat, schließt er auch die Kreditkartendaten aus dem Workflow-Ausführungsverlauf ein. Der Aktivitäts-Worker verfügt dann über die Informationen, die er zum Ausführen der Aktivitätsaufgabe benötigt.

Sind alle Aktivitäten der Workflow-Ausführung abgeschlossen, beendet der Entscheider die Ausführung.

https://swf.us-east-1.amazonaws.com RespondDecisionTaskCompleted { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "decisions" : [ { "decisionType" :"ScheduleActivityTask", "scheduleActivityTaskDecisionAttributes" : { "control" :"OPTIONAL_DATA_FOR_DECIDER", "activityType" : { "name" :"ScheduleChargeCreditCardActivity", "version" :"1.1" }, "activityId" :"3e2e6e55-e7c4-beef-feed-aa815722b7be", "scheduleToCloseTimeout" :"360", "taskList" : { "name" :"CC_TASKS" }, "scheduleToStartTimeout" :"60", "startToCloseTimeout" :"300", "heartbeatTimeout" :"60", "input" : "4321-0001-0002-1234: 0212 : 234" } } ] }

Beenden der Workflow-Ausführung

Stellt der Entscheider fest, dass der Geschäftsprozess abgeschlossen ist, also keine weiteren Aktivitäten ausgeführt werden müssen, generiert er eine Entscheidung, um die Workflow-Ausführung zu beenden.

Zum Beenden einer Workflow-Ausführung programmieren Sie den Entscheider so, dass er Ereignisse im Workflow-Verlauf interpretiert, um festzustellen, was bisher während der Ausführung passiert ist und um zu erkennen, ob die Ausführung des Workflows beendet werden sollte.

Wurde der Workflow erfolgreich abgeschlossen, beenden Sie dessen Ausführung, indem Sie RespondDecisionTaskCompleted mit der CompleteWorkflowExecution-Entscheidung aufrufen. Alternativ können Sie eine fehlerhafte Ausführung mit der FailWorkflowExecution-Entscheidung fehlschlagen lassen.

Im E-Commerce-Beispiel prüft der Entscheider den Verlauf und fügt basierend auf der Koordinationslogik eine Entscheidung zum Beenden der Workflow-Ausführung zu seiner Entscheidungsliste hinzu. Zudem initiiert er eine RespondDecisionTaskCompleted-Aktion durch eine "Workflow beenden"-Entscheidung.

Anmerkung

Es gibt Fälle, denen das Beenden einer Workflow-Ausführung fehlschlägt. Wird beispielsweise ein Signal empfangen, während der Entscheider die Workflow-Ausführung beendet, schlägt die Beenden-Entscheidung fehl. Sorgen Sie deshalb dafür, dass der Entscheider weiterhin Entscheidungsaufgaben abfragt. Stellen Sie außerdem sicher, dass der Entscheider, der die nächste Entscheidungsaufgabe erhält, auf das Ereignis reagiert - in diesem Fall ein Signal -, das das Schließen der Ausführung verhinderte.

Sie können auch das Abbrechen von Workflow-Ausführungen unterstützten. Dies kann insbesondere bei Workflows hilfreich sein, deren Ausführung lange dauert. Zur Unterstützung eines Abbruchs sollte Ihr Entscheider das WorkflowExecutionCancelRequested-Ereignis im Verlauf verarbeiten. Dieses Ereignis zeigt an, dass ein Abbruch der Ausführung angefordert wurde. Der Entscheider sollte entsprechende Aufräumaktionen durchführen. Dazu zählen das Abbrechen laufender Aktivitätsaufgaben und das Schließen des Workflows durch Aufruf der RespondDecisionTaskCompleted-Aktion mit der CancelWorkflowExecution-Entscheidung.

Im folgenden Beispiel wird RespondDecisionTaskCompleted aufgerufen, um anzugeben, dass die aktuelle Workflow-Ausführung abgebrochen wurde.

https://swf.us-east-1.amazonaws.com RespondDecisionTaskCompleted { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "decisions" : [ { "decisionType":"CancelWorkflowExecution", "CancelWorkflowExecutionAttributes":{ "Details": "Customer canceled order" } } ] }

Amazon SWF überprüft, um sicherzustellen, dass die Entscheidung, die Workflow-Ausführung zu schließen oder abzubrechen, die letzte vom Entscheider gesendete Entscheidung ist. Sind nach der Entscheidung, den Workflow zu schließen, noch andere Entscheidungen vorhanden, ist dies ungültig.

Starten von Entscheidern

Nach Abschluss der Entscheiderentwicklung können Sie einen oder mehrere Entscheider starten.

Packen Sie dazu Ihre Koordinationslogik in ein ausführbares Programm, das von Ihrer Entscheiderplattform unterstützt wird Sie können beispielsweise den Entscheidercode in eine ausführbare Java-Datei einschließen, die sowohl auf Linux- als auch auf Windows-Computern ausgeführt werden kann.

Nach dem Start sollten Ihre Entscheider mit dem Abrufen von Amazon SWF nach Aufgaben beginnen. Bis Sie die Workflow-Ausführung initiiert haben und Amazon SWF Entscheidungsaufgaben plant, kommt es beim Abrufen zu einem Timeout und es werden leere Antworten zurückgegeben. Eine leere Antwort ist eine Task-Struktur, in der der Wert von taskToken eine leere Zeichenfolge ist. Ihre Entscheider sollten einfach mit dem Abrufen fortfahren.

Amazon SWF stellt sich, dass immer nur eine Entscheidungsaufgabe für eine Workflow-Ausführung aktiv ist. So werden Probleme, beispielsweise Konflikte zwischen Entscheidungen, verhindert. Darüber hinaus stellt Amazon SWF sicher, dass eine einzelne Entscheidungsaufgabe einem einzelnen Entscheider zugewiesen wird, und zwar unabhängig von der Anzahl der laufenden Entscheider.

Steht etwas vor, das eine Entscheidungsaufgabe generiert, während ein Entscheider eine andere Entscheidungsaufgabe verarbeitet, stellt Amazon SWF die neue Aufgabe in die Warteschlange, bis die aktuelle Aufgabe abgeschlossen ist. Nach Abschluss der aktuellen Aufgabe stellt Amazon SWF die neue Entscheidungsaufgabe bereit. Darüber hinaus kommt es bei Entscheidungsaufgaben zu einer Art Stapelverarbeitung, d. h., wenn mehrere Aktivitäten abgeschlossen werden, während ein Entscheider eine Entscheidungsaufgabe verarbeitet, erstellt Amazon SWF nur eine einzelne neue Entscheidungsaufgabe, um dem Abschließen mehrerer Aufgaben gerecht zu werden. Allerdings wird jedem Abschluss einer Aufgabe ein separates Ereignis im Workflow-Ausführungsverlauf zugewiesen.

Abrufe sind ausgehende Anforderungen. Deshalb können Entscheider auf jedem Netzwerk ausgeführt werden, das Zugriff auf den Amazon SWF SWF-Endpunkt hat.

Damit Workflow-Ausführungen voranschreiten, muss mindestens ein Entscheider ausgeführt werden. Sie können beliebig viele Entscheider starten. Amazon SWF unterstützt mehrere Entscheider beim Abrufen von derselben Aufgabenliste.