Implementierung einer exklusiven Wahl mit Amazon Simple Workflow Service - 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.

Implementierung einer exklusiven Wahl mit Amazon Simple Workflow Service

In einigen Szenarios kann es sinnvoll sein, abhängig vom Ergebnis einer vorherigen Aktivität unterschiedliche Folgeaktivitäten zu planen. Mit dem exklusiven Wahlmuster können Sie flexible Workflows erstellen, die die komplexen Anforderungen einer Anwendung erfüllen.

Der Amazon Simple Workflow Service (Amazon SWF) bietet nicht ausdrücklich eine Aktion für die exklusive Wahl. Um eine exklusive Wahl zu nutzen, schreiben Sie die Entscheiderlogik so, dass basierend auf den Ergebnissen der vorherigen Aufgabe unterschiedliche Entscheidungen getroffen werden. Nachfolgend finden Sie einige Anwendungsbeispiele für die exklusive Wahl:

  • Durchführen von Bereinigungsaktivitäten, wenn eine vorherige Aktivität nicht erfolgreich abgeschlossen wurde

  • Planen unterschiedlicher Aktivitäten abhängig davon, ob der Kunde einen Basis- oder Premiumplan gekauft hat

  • Ausführen von unterschiedlichen Benutzerauthentifizierungsaktivitäten abhängig vom Bestellverlauf des Kunden

In dem E-Commerce-Beispiel können Sie mit der exklusiven Wahl eine Bestellung abhängig vom Ergebnis der Kreditkartenbelastung eine Bestellung entweder versenden oder stornieren. In der folgenden Abbildung plant der Entscheider die Aktivitätsaufgaben "Bestellung versenden" und "Vorgang schließen", wenn die Kreditkarte erfolgreich belastet werden konnte. Andernfalls plant er die Aktivitätsaufgaben "Bestellung stornieren" und "E-Mail an Kunde".

Abbildung eines Kundenbestell-Workflows

Der Entscheider plant die Aktivität ShipOrder, wenn die Kreditkarte erfolgreich belastet werden konnte. Andernfalls plant er die Aktivität CancelOrder.

Programmieren Sie den Entscheider in diesem Fall so, dass er den Verlauf ausliest und entscheidet, ob die Kreditkarte erfolgreich belastet wurde. Hierfür können Sie eine Logik wie die folgende verwenden.

IF lastEvent = "WorkflowExecutionStarted" addToDecisions ScheduleActivityTask(ActivityType = "VerifyOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "VerifyOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "ChargeCreditCardActivity") #Successful Credit Card Charge Activities ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "ChargeCreditCardActivity" addToDecisions ScheduleActivityTask(ActivityType = "ShipOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "ShipOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "RecordOrderCompletionActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "RecordOrderCompletionActivity" addToDecisions CompleteWorkflowExecution #Unsuccessful Credit Card Charge Activities ELSIF lastEvent = "ActivityTaskFailed" AND ActivityType = "ChargeCreditCardActivity" addToDecisions ScheduleActivityTask(ActivityType = "CancelOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "CancelOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "EmailCustomerActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "EmailCustomerActivity" addToDecisions CompleteWorkflowExecution ENDIF

Wenn die Kreditkarte erfolgreich belastet wurde, sollte der Entscheider mit RespondDecisionTaskCompleted antworten, um die Aktivität ShipOrder zu planen.

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":"ShipOrder", "version":"2.4" }, "activityId":"3e2e6e55-e7c4-fee-deed-aa815722b7be", "scheduleToCloseTimeout":"3600", "taskList":{ "name":"SHIPPING" }, "scheduleToStartTimeout":"600", "startToCloseTimeout":"3600", "heartbeatTimeout":"300", "input": "123 Main Street, Anytown, United States" } } ] }

Wenn die Kreditkarte nicht erfolgreich belastet wurde, sollte der Entscheider mit RespondDecisionTaskCompleted antworten, um die Aktivität CancelOrder zu planen.

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":"CancelOrder", "version":"2.4" }, "activityId":"3e2e6e55-e7c4-fee-deed-aa815722b7be", "scheduleToCloseTimeout":"3600", "taskList":{ "name":"CANCELLATIONS" }, "scheduleToStartTimeout":"600", "startToCloseTimeout":"3600", "heartbeatTimeout":"300", "input": "Out of Stock" } } ] }

Wenn Amazon SWF in der Lage ist, die Daten imRespondDecisionTaskCompleted-Aktion gibt Amazon SWF eine erfolgreiche HTTP-Antwort ähnlich wie im folgenden Beispiel zurück.

HTTP/1.1 200 OK Content-Length: 11 Content-Type: application/json x-amzn-RequestId: 93cec6f7-0747-11e1-b533-79b402604df1