Aplicación HelloWorldWorkflowDistributed - AWS Flow Framework para Java

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.

Aplicación HelloWorldWorkflowDistributed

Con HelloWorldWorkflow y HelloWorldWorkflowAsync, Amazon SWF actúa como intermediario en la interacción entre las implementaciones de flujo de trabajo y actividades, pero se ejecutan localmente en un solo proceso. GreeterMain está en un proceso independiente, pero sigue ejecutándose en el mismo sistema.

Una característica clave de Amazon SWF es que admite aplicaciones distribuidas. Por ejemplo, podría ejecutar el proceso de trabajo de flujo de trabajo en una instancia de Amazon EC2, el iniciador de flujo de trabajo en un equipo del centro de datos y las actividades en un equipo de escritorio cliente. Es posible incluso ejecutar diferentes actividades en diferentes sistemas.

La aplicación HelloWorldWorkflowDistributed extiende HelloWorldWorkflowAsync para distribuir la aplicación entre dos sistemas y tres procesos.

  • El flujo de trabajo y el iniciador del flujo de trabajo se ejecutan como procesos independientes en un sistema.

  • Las actividades se ejecutan en un sistema independiente.

Para implementar la aplicación, cree una copia del paquete helloWorld.HelloWorldWorkflowAsync en el directorio de proyectos y asígnele el nombre helloWorld.HelloWorldWorkflowDistributed. Las siguientes secciones describen cómo modificar el código HelloWorldWorkflowAsync original para distribuir la aplicación entre dos sistemas y tres procesos.

No es necesario que cambie el flujo de trabajo o las implementaciones de actividades para ejecutarlos en sistemas independientes, ni tan siquiera los números de versión. Tampoco es necesario que modifique GreeterMain. Solo tiene que cambiar las actividades y el host del flujo de trabajo.

Con HelloWorldWorkflowAsync, una sola aplicación actúa como host de flujo de trabajo y de actividad. Para ejecutar las implementaciones de flujo de trabajo y actividad en sistemas independientes, tiene que implementar aplicaciones independientes. Elimine GreeterWorker del proyecto y añada dos archivos de clase nuevos, GreeterWorkflowWorker y GreeterActivitiesWorker.

HelloWorldWorkflowDistributed implementa su host de actividades en GreeterActivitiesWorker, de la siguiente manera:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.ActivityWorker; public class GreeterActivitiesWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); } }

HelloWorldWorkflowDistributed implementa su host de flujo de trabajo en GreeterWorkflowWorker, de la siguiente manera:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.WorkflowWorker; public class GreeterWorkflowWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; WorkflowWorker wfw = new WorkflowWorker(service, domain, taskListToPoll); wfw.addWorkflowImplementationType(GreeterWorkflowImpl.class); wfw.start(); } }

Tenga en cuenta que GreeterActivitiesWorker es simplemente GreeterWorker sin el código WorkflowWorker y GreeterWorkflowWorker es simplemente GreeterWorker sin el código ActivityWorker.

Para ejecutar el flujo de trabajo:
  1. Cree un archivo JAR ejecutable con GreeterActivitiesWorker como punto de entrada.

  2. Copie el archivo JAR del Paso 1 en otro sistema, que puede estar ejecutando cualquier sistema operativo que admita Java.

  3. Asegúrese de que el otro sistema disponga de credenciales de AWS con acceso al mismo dominio de Amazon SWF.

  4. Ejecute el archivo JAR.

  5. Utilice Eclipse para ejecutar GreeterWorkflowWorker y GreeterMain en su sistema de desarrollo.

Aparte del hecho de que las actividades se ejecutan en un sistema distinto al del proceso de trabajo de flujo de trabajo y el iniciador del flujo de trabajo, el flujo de trabajo funciona exactamente igual que HelloWorldAsync. Sin embargo, como la llamada println que imprime “Hello World!” en la consola se encuentra en la actividad say, el resultado aparecerá en el sistema que ejecuta el proceso de trabajo de las actividades.