Entwickeln eines Aktivitäts-Workers 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 eines Aktivitäts-Workers in Amazon SWF

Ein Aktivitäts-Worker implementiert einen oder mehrere Aktivitätstypen. Er kommuniziert mit Amazon SWF, um Aktivitätsaufgaben abzurufen und auszuführen. Sie können mehrere Aktivitäts-Worker für Aktivitätsaufgaben desselben Aktivitätstyps erstellen.

Amazon SWF stellt den Aktivitäts-Workern eine Aktivitätsaufgabe bereit, wenn der Entscheider die Aktivitätsaufgabe plant. Wenn ein Entscheider eine Aktivitätsaufgabe plant, stellt der (von Ihnen festgelegten) Daten bereit, die der Aktivitäts-Worker zum Ausführen der Aktivitätsaufgabe benötigt. Amazon SWF fügt diese Daten in die Aktivitätsaufgabe ein, bevor diese an den Aktivitäts-Worker gesendet wird.

Sie selbst verwalten die Aktivitäts-Worker. Sie können in einer beliebigen Programmiersprache geschrieben werden. Ein Worker kann überall ausgeführt werden, solange er über die API mit Amazon SWF kommunizieren kann. Da Amazon SWF alle für die Ausführung einer Aktivitätsaufgabe erforderlichen Informationen bereitstellt, können alle Aktivitäts-Worker zustandslos sein. Dadurch sind Ihre Workflows extrem skalierbar; um höhere Kapazitäten verarbeiten zu können, fügen Sie einfach weitere Aktivitäts-Worker hinzu.

In diesem Abschnitt wird erläutert, wie Sie einen Aktivitäts-Worker implementieren. Aktivitäts-Worker sollten folgende Aktivitäten regelmäßig ausführen.

  1. Fragen Sie Amazon SWF nach einer Aktivitätsaufgabe ab.

  2. Mit der Ausführung der Aufgabe beginnen

  3. Regelmäßig einen Heartbeat an Amazon SWF senden, wenn es sich um eine langfristige Aufgabe handelt.

  4. Melden, wenn die Aufgabe abgeschlossen wurde oder fehlgeschlagen ist, und die Ergebnisse an Amazon SWF senden.

Abrufen von Aktivitätsaufgaben

Um Aktivitätsaufgaben verarbeiten zu können, muss ein Aktivitäts-Worker regelmäßig denPollForActivityTaskAktion

Im folgenden Beispiel sendet der Aktivitäts-Worker ChargeCreditCardWorker01 eine Anfrage für die erste Aufgabe in der Aufgabenliste ChargeCreditCard-v0.1. Wenn keine Aktivitätsaufgaben verfügbar sind, sendet Amazon SWF nach 60 Sekunden eine leere Antwort zurück. Eine leere Antwort ist eine Task-Struktur, in der der Wert von taskToken eine leere Zeichenfolge ist.

https://swf.us-east-1.amazonaws.com PollForActivityTask { "domain" : "867530901", "taskList" : { "name": "ChargeCreditCard-v0.1" }, "identity" : "ChargeCreditCardWorker01" }

Wenn eine Aktivitätsaufgabe verfügbar ist, gibt diese von Amazon SWF an den Aktivitäts-Worker zurück. Die Aufgabe enthält die Daten, die der Entscheider beim Planen der Aktivität festgelegt hat.

Sobald ein Aktivitäts-Worker eine Aktivitätsaufgabe empfängt, kann er mit der Verarbeitung beginnen. Im nächsten Abschnitt wird die Verarbeitung von Aktivitätsaufgaben beschrieben.

Verarbeiten von Aktivitätsaufgaben

Nachdem ein Aktivitäts-Worker eine Aktivitätsaufgabe empfangen hat, kann er mit der Verarbeitung beginnen.

So verarbeiten Sie eine Aktivitätsaufgabe
  1. Programmieren Sie ihren Aktivitäts-Worker so, dass der Inhalt im Eingabefeld der Aufgabe analysiert wird. Dieses Feld enthält die Daten, die der Entscheider beim Planen der Aktivität festgelegt hat.

  2. Programmieren Sie den Aktivitäts-Worker so, dass er mit der Verarbeitung der Daten und der Ausführung der programmierten Logik beginnt.

Im nächsten Abschnitt wird beschrieben, wie Sie Ihren Aktivitäts-Worker so programmieren, dass er bei langfristigen Aktivitäten Statusaktualisierungen an sendet.

Senden von Heartbeats für Aktivitätsaufgaben

Wenn für einen Aktivitätstyp eine Heartbeat-Zeitüberschreitung registriert wurde, muss der Aktivitäts-Worker einen Heartbeat senden, bevor die Zeitüberschreitung abläuft. Wenn für eine Aktivitätsaufgabe kein Heartbeat in der Zeitüberschreitung festgelegt wurde, tritt die Zeitüberschreitung in Kraft und Amazon SWF schließt die Aufgabe und plant eine neue Entscheidungsaufgabe, um den Entscheider über die Zeitüberschreitung zu informieren. Der Entscheider kann die Aktivitätsaufgabe dann neu planen oder eine andere Aktion ausführen.

Wenn der Aktivitäts-Worker nach einer Zeitüberschreitung versucht, mit Amazon SWF zu kommunizieren, indem er beispielsweise aufruftRespondActivityTaskCompletedwird Amazon SWF eine zurückgebenUnknownResourceFehlermeldung.

In diesem Abschnitt wird erläutert, wie Sie einen Aktivitäts-Heartbeat senden.

Um einen Heartbeat für eine Aktivitätsaufgabe aufzuzeichnen, programmieren Sie Ihren Aktivitäts-Worker so, dass die Aktion RecordActivityTaskHeartbeat aufgerufen wird. Diese Aktion stellt auch ein Zeichenfolgenfeld bereit, in dem Sie Freitextdaten speichern können, um den Fortschritt in einer für Ihre Anwendung geeigneten Form anzugeben.

In diesem Beispiel sendet der Aktivitäts-Worker einen Heartbeat an Amazon SWF und meldet im Detailfeld den Status der Aktivitätsaufgabe als 40% abgeschlossen. Um einen Heartbeat zu senden, muss der Aktivitäts-Worker das Aufgabentoken der Aktivitätsaufgabe angeben.

https://swf.us-east-1.amazonaws.com RecordActivityTaskHeartbeat { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "details" : "40" }

Durch diese Aktion selbst wird noch kein Ereignis im Verlauf der Workflow-Ausführung erstellt. Wenn jedoch eine Zeitüberschreitung für die Aufgabe auftritt, enthält der Verlauf der Workflow-Ausführung ein Ereignis ActivityTaskTimedOut mit den Informationen des letzten Heartbeats, den der Aktivitäts-Worker gesendet hat.

Abschließen oder fehlschlagen einer Aktivitätsaufgabe

Nachdem eine Aufgabe ausgeführt wurde, sollte der Aktivitäts-Worker melden, ob die Aktivitätsaufgabe abgeschlossen wurde oder fehlgeschlagen ist.

Abschließen einer Aktivitätsaufgabe

Um eine Aktivitätsaufgabe abzuschließen, programmieren Sie Ihren Aktivitäts-Worker so, dass er unter Angabe des Aufgabentokens die Aktion RespondActivityTaskCompleted aufruft, nachdem eine Aktivitätsaufgabe erfolgreich abgeschlossen wurde.

In diesem Beispiel teilt der Aktivitäts-Worker mit, dass die Aufgabe erfolgreich abgeschlossen wurde.

https://swf.us-east-1.amazonaws.com RespondActivityTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "results": "40" }

Nach Abschluss einer Aktivität plant Amazon SWF eine neue Entscheidungsaufgabe für die Workflow-Ausführung, der die Aktivität zugeordnet ist.

Programmieren Sie den Aktivitäts-Worker so, dass er nach Abschluss der aktuellen Aufgabe eine neue Aktivitätsaufgabe anfordert. So entsteht eine Schleife, in der der Aktivitäts-Worker fortlaufend Aufgaben anfordert und abschließt.

Wenn die Aktivität nicht innerhalb desstartToCloseTimeoutZeitraum oder wennScheduleTocloseTimeoutwurde überschritten, Amazon SWF stellt die Zeitüberschreitung für die Aktivitätsaufgabe bereit und plant eine Entscheidungsaufgabe. So kann ein Entscheider eine angemessene Aktion wie das erneute Planen der Aufgabe ausführen.

Wenn beispielsweise eine Amazon EC2 EC2-Instance eine Aktivitätsaufgabe ausführt und die Instance ausfällt, bevor die Aufgabe abgeschlossen wurde, empfängt der Entscheider ein Zeitüberschreitungsereignis im Verlauf der Workflow-Ausführung. Wenn für die Aktivitätsaufgabe ein Heartbeat verwendet wird, empfängt der Entscheider das Ereignis, wenn die Aufgabe nach dem Ausfall der Amazon EC2 EC2-Instance den nächsten Heartbeat nicht sendet. Andernfalls empfängt der Entscheider das Ereignis, wenn die Aktivitätsaufgabe fehlschlägt, bevor einer der allgemeinen Zeitüberschreitungswerte erreicht wurde. Der Entscheider muss die Aufgabe dann neu zuweisen oder eine andere Aktion ausführen.

Fehlschlagen einer Aktivitätsaufgabe

Wenn ein Aktivitäts-Worker eine Aktivitätsaufgabe aus irgendeinem Grund nicht ausführen, aber dennoch mit Amazon SWF kommunizieren kann, können Sie ihn so programmieren, dass diese Aufgabe fehlschlägt.

Um einen Aktivitäts-Worker so zu programmieren, dass eine Aktivitätsaufgabe fehlschlägt, lassen Sie den Aktivitäts-Worker die Aktion RespondActivityTaskFailed unter Angabe des Aufgabentokens der Aufgabe aufrufen.

https://swf.us-east-1.amazonaws.com RespondActivityTaskFailed { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "reason" : "CC-Invalid", "details" : "Credit Card Number Checksum Failed" }

Als Entwickler legen Sie in den Grund- und Detailfeldern die Werte fest, die gespeichert werden. Dies sind Freiformfelder. Sie können beliebige Fehlercodes für Ihre Anwendung verwenden. Amazon SWF verarbeitet diese Werte nicht. Allerdings zeigt Amazon SWF diese Werte jedoch in der Konsole an.

Wenn eine Aktivitätsaufgabe fehlgeschlagen ist, plant Amazon SWF eine Entscheidungsaufgabe für die Workflow-Ausführung, der diese Aktivitätsaufgabe zugeordnet ist, um den Entscheider über die fehlgeschlagene Aufgabe zu informieren. Programmieren Sie Ihren Entscheider so, dass er abhängig von der Art des Fehlers fehlgeschlagene Aktivitäten abarbeitet, beispielsweise durch erneutes Planen der Aktivität oder Fehlschlagen der Workflow-Ausführung.

Starten von Aktivitäts-Workern

Um Aktivitäts-Worker zu starten, packen Sie Ihre Logik in ein ausführbares Programm, das von Ihrer Aktivitäts-Worker-Plattform unterstützt wird. Sie können beispielsweise den Aktivitätscode in eine ausführbare Java-Datei einschließen, die sowohl auf Linux- als auch auf Windows-Servern ausgeführt werden kann.

Nach dem Start beginnen Ihre Worker mit dem Abrufen von Aufgaben. Bis der Entscheider jedoch Aktivitätsaufgaben plant, treten für diese Abfragen Zeitüberschreitungen auf und die Worker fragen weitere Aufgaben ab.

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

Sie können beliebig viele Aktivitäts-Worker starten. Wenn der Entscheider Aktivitätsaufgaben plant, verteilt Amazon SWF die Aktivitätsaufgaben automatisch an die abfragenden Aktivitäts-Worker.