Desarrollo de un proceso de trabajo de actividad en Amazon SWF - Amazon Simple Workflow Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Desarrollo de un proceso de trabajo de actividad en Amazon SWF

Un proceso de trabajo de actividad que proporcione la implementación de uno o varios tipos de actividad. Un proceso de trabajo de actividad se comunica con Amazon SWF para recibir tareas de actividad y realizarlas. Puede tener una flota de varios procesos de trabajo de actividad que realicen tareas de actividad del mismo tipo de actividad.

Amazon SWF pone una tarea de actividad a disposición de los procesos de trabajo de actividad cuando el decisor programa la tarea de actividad. Cuando un decisor programa una tarea de actividad, proporciona los datos (que usted determine) necesarios para que el proceso de trabajo de actividad realice la tarea de actividad. Amazon SWF inserta estos datos en la tarea de actividad antes de enviarla al proceso de trabajo de la actividad.

Usted administra los procesos de trabajo de actividad. Se pueden escribir en cualquier lenguaje. Un proceso de trabajo se puede ejecutar en cualquier lugar, siempre que pueda comunicarse con Amazon SWF a través de la API. Como Amazon SWF proporciona toda la información necesaria para realizar una tarea de actividad, todos los procesos de trabajo de actividad pueden carecer de estado. La ausencia de estado permite que sus flujos de trabajo sean altamente escalables; para afrontar los requisitos de capacidad incrementada, solo tiene que añadir más procesos de trabajo de actividad.

En esta sección se explica cómo implementar un proceso de trabajo de actividad. Los procesos de trabajo de actividad deben hacer lo siguiente una y otra vez.

  1. Sondear Amazon SWF para encontrar una tarea de actividad.

  2. Empezar a realizar la tarea.

  3. Enviar un latido a Amazon SWF de forma periódica si la duración de la tarea es prolongada.

  4. Informar de que la tarea se ha completado o de que se ha producido un error en la misma y devolver los resultados a Amazon SWF.

Sondeo de tareas de actividad

Para realizar tareas de actividad, cada proceso de trabajo de actividad debe sondear Amazon SWF llamando periódicamente a la acción PollForActivityTask.

En el siguiente ejemplo, el proceso de trabajo de actividad ChargeCreditCardWorker01 sondea una tarea de la lista de tareas, ChargeCreditCard-v0.1. Si no hay ninguna tarea de actividad disponible, transcurridos 60 segundos, Amazon SWF devuelve una respuesta vacía. Una respuesta vacía es una estructura Task en la que el valor de taskToken es una cadena vacía.

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

Si una tarea de actividad está disponible, Amazon SWF la devuelve al proceso de trabajo de actividad. La tarea contiene los datos que especifica el decisor al programar la actividad.

Una vez que un proceso de trabajo de actividad reciba una tarea de actividad, estará listo para realizar el trabajo. En la siguiente sección se proporciona información acerca de la realización de una tarea de actividad.

Realización de la tarea de actividad

Tras recibir una tarea de actividad, el proceso de trabajo de actividad estará listo para realizarla.

Para realizar una tarea de actividad
  1. Programe su proceso de trabajo de actividad para interpretar el contenido en el campo de entrada de la tarea. En este campo se incluyen los datos especificados por el decisor durante la programación de la tarea.

  2. Programe el proceso de trabajo de actividad para empezar a procesar los datos y ejecutar su lógica.

En la siguiente sección, se describe cómo programar procesos de trabajo de actividad para proporcionar actualizaciones de estado a Amazon SWF para actividades de ejecución prolongada.

Notificación de los latidos de tareas de actividad

Si se ha registrado el tiempo de espera del latido con el tipo de actividad, el proceso de trabajo de actividad debe registrar un latido antes de superarse el tiempo de espera del latido. Si una tarea de actividad no proporciona un latido en el intervalo de tiempo de espera, el tiempo de espera de la tarea se agota, Amazon SWF la cierra y programa una nueva tarea de decisión para informar a un decisor de que se ha agotado el tiempo de espera. Es entonces cuando el decisor puede volver a programar la tarea de actividad o tomar otras medidas.

Si, tras agotarse el tiempo de espera, el proceso de trabajo de actividad intentara contactar con Amazon SWF, por ejemplo, mediante una llamada a RespondActivityTaskCompleted, Amazon SWF devolverá un error UnknownResource.

En esta sección se describe cómo proporcionar un latido de actividades.

Para registrar un latido de tareas de actividad, programe su proceso de trabajo de actividad para llamar a la acción RecordActivityTaskHeartbeat. Esta acción también proporciona un campo de cadena que puede usar para almacenar datos de formato libre para cuantificar el progreso de la forma que funcione para su aplicación.

En este ejemplo, el proceso de trabajo de actividad informa del latido a Amazon SWF y utiliza el campo de detalles para indicar que la tarea de actividad se ha completado en un 40 por ciento. Para informar del latido, el proceso de trabajo de actividad debe especificar el token de tarea de la tarea de actividad.

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

Esta acción en sí misma no crea un evento en el historial de ejecución de flujo de trabajo; sin embargo, si el tiempo de espera de la tarea se agota, el historial de ejecución de flujo de trabajo contendrá un evento ActivityTaskTimedOut que incluye la información del último latido generado por el proceso de trabajo de actividad.

Finalización de una tarea de actividad o generación de un error en la misma

Después de ejecutar una tarea, el proceso de trabajo de actividad debe informar de si la tarea de actividad se ha completado o de si se ha producido un error en la misma.

Finalización de una tarea de actividad

Para completar una tarea de actividad, programe el proceso de trabajo de actividad para llamar a la acción RespondActivityTaskCompleted tras completar correctamente una tarea de actividad, especificando el token de tarea.

En este ejemplo, el proceso de trabajo de actividad indica que la tarea se ha completado correctamente.

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

Al completarse la actividad, Amazon SWF programa una tarea de decisión nueva para la ejecución de flujo de trabajo a la que se asocia la actividad.

Programe el proceso de trabajo de actividad para sondear otra tarea de actividad después de que haya completado la tarea en cuestión. De este modo se crea un bucle en el que el proceso de trabajo de actividad sondea y completa tareas continuamente.

Si la actividad no responde en el periodo de StartToCloseTimeout o si se ha superado ScheduleToCloseTimeout, Amazon SWF agota el tiempo de espera de la tarea de actividad y programa una tarea de decisión. Esto permite a un decisor tomar las medidas adecuadas, por ejemplo, reprogramar la tarea.

Por ejemplo, si una instancia de Amazon EC2 ejecuta una tarea de actividad y se produce un error en la instancia antes de completarse la tarea, el decisor recibirá un evento de tiempo de espera en el historial de ejecución del flujo de trabajo. Si la tarea de actividad utiliza un latido, el decisor recibirá el evento cuando la tarea no logre entregar el siguiente latido tras producirse un error en la instancia de Amazon EC2. De lo contrario, el decisor recibe finalmente el evento cuando la tarea de actividad no logra completarse antes de llegar a uno de sus valores de tiempo de espera generales. Depende entonces del decisor reasignar la tarea o tomar otras medidas.

Generación de un error en una tarea de actividad

Si un proceso de trabajo de actividad no puede realizar una tarea de actividad por algún motivo, pero todavía puede comunicarse con Amazon SWF, es posible programarlo para que produzca un error en la tarea.

Para programar un proceso de trabajo de actividad de modo que produzca un error en una tarea de actividad, programe el proceso de trabajo de actividad para llamar a la acción RespondActivityTaskFailed que especifica el token de tarea de la tarea.

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

Como desarrollador, se ocupa de definir los valores que se almacenan en los campos de detalles o motivo. Estas son cadenas de formato libre; puede utilizar cualquier convención de código de error que sirva a su aplicación. Amazon SWF no procesa estos valores. Sin embargo, Amazon SWF puede mostrar estos valores en la consola.

Cuando se produce un error en una tarea de actividad, Amazon SWF programa una tarea de decisión para la ejecución de flujo de trabajo a la que está asociada la tarea para informar al decisor del error. Programe su decisor para controlar las actividades que han producido un error, por ejemplo, reprogramando la actividad o no superando la ejecución de flujo de trabajo, dependiendo de la naturaleza del error.

Lanzamiento de procesos de trabajo de actividad

Para lanzar procesos de trabajo de actividad, empaquete su lógica en un ejecutable que puede usar en su plataforma de proceso de trabajo de actividad. Por ejemplo, puede empaquetar su código de actividad como ejecutable de Java que puede ejecutar tanto en servidores Linux como en servidores Windows.

Tras su lanzamiento, sus procesos de trabajo comienzan a sondear tareas. Hasta que el decisor programa tareas de actividad, sin embargo, el tiempo de espera de estos sondeos se agota sin tareas y sus procesos de trabajo se limitan a seguir realizando sondeos.

Puesto que los sondeos son solicitudes salientes, el proceso de trabajo de la actividad se puede ejecutar en cualquier red con acceso al punto de conexión de Amazon SWF.

Puede lanzar tantos procesos de trabajo de actividad como desee. A medida que el decisor programa tareas de actividad, Amazon SWF las distribuye automáticamente a los procesos de trabajo de actividad de sondeo.