Développement d'un Activity Worker dans Amazon SWF - Amazon Simple Workflow Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Développement d'un Activity Worker dans Amazon SWF

Un outil de traitement d'activité fournit l'implémentation d'un ou de plusieurs types d'activités. Un travailleur d'activité communique avec Amazon SWF pour recevoir des tâches d'activité et les exécuter. Plusieurs outils de traitement d'activité peuvent réaliser des tâches dont le type d'activité est le même.

Amazon SWF met une tâche d'activité à la disposition des travailleurs lorsque le décideur planifie la tâche d'activité. Lorsqu'un décideur planifie une tâche d'activité, il fournit les données (que vous déterminez) dont le travailleur d'activité a besoin pour effectuer cette tâche d'activité. Amazon SWF insère ces données dans la tâche d'activité avant de les envoyer au responsable de l'activité.

Les outils de traitement d'activité sont gérés par vous. Ils peuvent être écrits dans n'importe quel langage. Un programme de travail peut être exécuté n'importe où, à condition qu'il puisse communiquer avec Amazon SWF via l'API. Amazon SWF fournissant toutes les informations nécessaires à l'exécution d'une tâche d'activité, tous les intervenants peuvent être apatrides. L'absence d'état permet aux flux de travail d'être hautement évolutifs. Pour gérer les besoins accrus en capacité, il suffit d'ajouter des outils de traitement d'activité.

Cette section explique comment mettre en œuvre un outil de traitement d'activité. Les outils de traitement d'activité doivent régulièrement effectuer les opérations suivantes.

  1. Interrogez Amazon SWF pour une tâche d'activité.

  2. Commencer l'exécution de la tâche

  3. Signalez régulièrement un battement de cœur à Amazon SWF si la tâche est de longue durée.

  4. Signalez que la tâche s'est terminée ou a échoué et renvoyez les résultats à Amazon SWF.

Recherche de tâches d'activité

Pour effectuer des tâches d'activité, chaque intervenant doit interroger Amazon SWF en appelant régulièrement l'PollForActivityTaskaction.

Dans l'exemple suivant, l'outil de traitement d'activité ChargeCreditCardWorker01 recherche une tâche dans la liste des tâches, ChargeCreditCard-v0.1. Si aucune tâche d'activité n'est disponible, Amazon SWF renvoie une réponse vide au bout de 60 secondes. Une réponse vide est une structure Task dans laquelle la valeur taskToken est une chaîne vide.

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

Si une tâche d'activité devient disponible, Amazon SWF la renvoie au responsable de l'activité. La tâche contient les données que le décideur spécifie quand il planifie l'activité.

Une fois qu'un outil de traitement d'activité reçoit une tâche d'activité, il peut l'effectuer. La section suivante décrit comment réaliser une tâche d'activité.

Réalisation de la tâche d'activité

Après avoir reçu une tâche d'activité, l'outil de traitement d'activité est prêt à l'exécuter.

Pour effectuer une tâche d'activité
  1. Programmez l'outil de traitement d'activité pour interpréter le contenu du champ d'entrée de la tâche. Ce champ contient les données spécifiées par le décideur lorsque la tâche a été programmée.

  2. Programmez l'outil de traitement d'activité pour commencer à traiter les données et à exécuter votre logique.

La section suivante explique comment programmer vos agents d'activité pour qu'ils fournissent des mises à jour de statut à Amazon SWF pour les activités de longue durée.

Création de rapports sur les pulsations des tâches d'activité

Si un délai de pulsation a été associé au type d'activité, l'outil de traitement d'activité doit enregistrer une pulsation avant que ce délai n'expire. Si une tâche d'activité ne fournit pas de battement de cœur dans le délai imparti, la tâche expire, Amazon SWF la ferme et planifie une nouvelle tâche de décision pour informer le décideur du délai d'expiration. Le décideur peut ensuite replanifier la tâche d'activité ou effectuer une autre action.

Si, après expiration du délai imparti, le responsable de l'activité tente de contacter Amazon SWF, par exemple en appelantRespondActivityTaskCompleted, Amazon SWF renverra un message d'erreur. UnknownResource

Cette section décrit comment fournir une pulsation d'activité.

Pour enregistrer une pulsation pour la tâche d'activité, programmez l'outil de traitement d'activité pour appeler l'action RecordActivityTaskHeartbeat. Cette action fournit également un champ de chaîne que vous pouvez utiliser pour stocker les données de forme libre afin de quantifier la progression de la façon qui convient à votre application.

Dans cet exemple, le responsable de l'activité indique le rythme cardiaque à Amazon SWF et utilise le champ de détails pour indiquer que la tâche d'activité est terminée à 40 %. Pour signaler la pulsation, l'outil de traitement d'activité doit spécifier le jeton de la tâche d'activité.

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

Cette action ne crée pas en soi un événement dans l'historique d'exécution du flux de travail. Toutefois, si la tâche expire, l'historique d'exécution du flux de travail contient un événement ActivityTaskTimedOut qui comprend les informations provenant de la dernière pulsation générée par l'outil de traitement d'activité.

Réussite ou échec d'une tâche d'activité

Après l'exécution d'une tâche, l'outil de traitement d'activité doit indiquer si celle-ci a réussi ou échoué.

Finalisation d'une tâche d'activité

Pour finaliser une tâche d'activité, programmez l'outil de traitement d'activité pour appeler l'action RespondActivityTaskCompleted une fois que la tâche d'activité aboutit, en spécifiant le jeton correspondant.

Dans cet exemple, l'outil de traitement d'activité indique que la tâche s'est correctement déroulée.

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

Lorsque l'activité est terminée, Amazon SWF planifie une nouvelle tâche de décision pour l'exécution du flux de travail auquel l'activité est associée.

Programmez l'outil de traitement d'activité pour rechercher une autre tâche d'activité une fois qu'une tâche est terminée. Avec ce processus en boucle, l'outil de traitement d'activité recherche et finalise constamment les tâches.

Si l'activité ne répond pas dans le StartToCloseTimeoutdélai imparti, ou si ScheduleToCloseTimeoutelle a été dépassée, Amazon SWF expire la tâche d'activité et planifie une tâche de décision. Cette approche permet à un décideur d'effectuer une action appropriée, telle que la reprogrammation de la tâche.

Par exemple, si une EC2 instance Amazon exécute une tâche d'activité et que l'instance échoue avant que la tâche ne soit terminée, le décideur reçoit un événement de temporisation dans l'historique d'exécution du flux de travail. Si la tâche d'activité utilise un battement de cœur, le décideur reçoit l'événement lorsque la tâche ne parvient pas à délivrer le battement de cœur suivant après l'échec de l'instance Amazon EC2 . Si ce n'est pas le cas, le décideur finit par recevoir l'événement lorsque la tâche d'activité n'aboutit pas dans les délais spécifiés. Il appartient ensuite au décideur de réaffecter la tâche ou d'effectuer une autre action.

Échec d'une tâche d'activité

Si, pour une raison ou une autre, un agent d'activité ne peut pas exécuter une tâche d'activité, mais qu'il peut toujours communiquer avec Amazon SWF, vous pouvez le programmer pour qu'il échoue.

Pour que l'outil de traitement d'activité abandonne une tâche d'activité, programmez-le pour qu'il appelle l'action RespondActivityTaskFailed, qui spécifie le jeton de la tâche.

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

En tant que développeur, vous définissez les valeurs qui sont stockées dans les champs Reason et Details. Il s'agit de chaînes de forme libre ; vous pouvez utiliser toutes les conventions de code d'erreur applicables à votre application. Amazon SWF ne traite pas ces valeurs. Amazon SWF peut toutefois afficher ces valeurs dans la console.

Lorsqu'une tâche d'activité échoue, Amazon SWF planifie une tâche de décision pour l'exécution du flux de travail auquel la tâche d'activité est associée afin d'informer le décideur de l'échec. Programmez le décideur pour gérer les activités ayant échoué, par exemple en replanifiant l'activité ou en abandonnant l'exécution du flux de travail, selon la nature de l'échec.

Lancement des outils de traitement d'activité

Pour lancer les outils de traitement d'activité, compressez votre logique dans un fichier exécutable que vous pourrez utiliser sur la plateforme de ces outils de traitement d'activité. Par exemple, vous pouvez compresser votre code activité sous forme de fichier exécutable Java que vous pouvez exécuter sur des serveurs Linux et Windows.

Une fois lancés, les outils de traitement d'activité se mettent à rechercher des tâches. Toutefois, tant que le décideur ne planifie pas les tâches d'activité, ces recherches expirent sans tâche et les outils de traitement d'activité continuent simplement de rechercher des tâches.

Les sondages étant des demandes sortantes, Activity Worker peut être exécuté sur n'importe quel réseau ayant accès au point de terminaison Amazon SWF.

Vous pouvez lancer autant de outils de traitement d'activité que vous le souhaitez. Au fur et à mesure que le décideur planifie les tâches d'activité, Amazon SWF distribue automatiquement les tâches d'activité aux personnes chargées du sondage.