Aplicación HelloWorldWorkflowParallel - 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 HelloWorldWorkflowParallel

Las versiones anteriores de Hello World! todas utilizar una topología de flujo de trabajo lineal. No obstante, Amazon SWF no se limita a las topologías lineales. La aplicación HelloWorldWorkflowParallel es una versión modificada de HelloWorldWorkflow que utiliza una topología paralela, como se muestra en la siguiente figura.

Topología de flujo de trabajo de HelloWorldWorkflowParallel

Con HelloWorldWorkflowParallel, getName y getGreeting se ejecutan en paralelo y cada uno de ellos devuelve parte del saludo. say fusiona a continuación las dos cadenas en un saludo y lo imprime en la consola.

Para implementar la aplicación, cree una copia del paquete helloWorld.HelloWorldWorkflow en el directorio de proyectos y asígnele el nombre helloWorld.HelloWorldWorkflowParallel. Las siguientes secciones describen cómo modificar el código HelloWorldWorkflow original para ejecutar getName y getGreeting en paralelo.

Proceso de trabajo de actividades de HelloWorldWorkflowParallel

La interfaz de actividades de HelloWorldWorkflowAsync se implementa en GreeterActivities, como se muestra en el siguiente ejemplo.

import com.amazonaws.services.simpleworkflow.flow.annotations.Activities; import com.amazonaws.services.simpleworkflow.flow.annotations.ActivityRegistrationOptions; @Activities(version="5.0") @ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 10) public interface GreeterActivities { public String getName(); public String getGreeting(); public void say(String greeting, String name); }

La interfaz es similar a la de HelloWorldWorkflow, con las siguientes excepciones:

  • getGreeting no toma ninguna entrada; simplemente devuelve una cadena de saludos.

  • say toma dos cadenas de entrada, el saludo y el nombre.

  • La interfaz tiene un número de versión nuevo, que se necesita siempre que cambia una interfaz registrada.

HelloWorldWorkflowParallel implementa las actividades en GreeterActivitiesImpl de la siguiente manera:

public class GreeterActivitiesImpl implements GreeterActivities { @Override public String getName() { return "World!"; } @Override public String getGreeting() { return "Hello "; } @Override public void say(String greeting, String name) { System.out.println(greeting + name); } }

getName y getGreeting ahora simplemente devuelven la mitad de la cadena del saludo. say concatena las dos piezas para producir la frase completa y la imprime en la consola.

Proceso de trabajo de flujo de trabajo de HelloWorldWorkflowParallel

La interfaz de flujo de trabajo de HelloWorldWorkflowParallel se implementa en GreeterWorkflow de la siguiente manera:

import com.amazonaws.services.simpleworkflow.flow.annotations.Execute; import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow; import com.amazonaws.services.simpleworkflow.flow.annotations.WorkflowRegistrationOptions; @Workflow @WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 3600) public interface GreeterWorkflow { @Execute(version = "5.0") public void greet(); }

La clase es idéntica a la versión HelloWorldWorkflow, salvo el número de versión que se ha cambiado para que coincida con el proceso de trabajo de actividades.

El flujo de trabajo se implementa en GreeterWorkflowImpl de la siguiente manera:

import com.amazonaws.services.simpleworkflow.flow.core.Promise; public class GreeterWorkflowImpl implements GreeterWorkflow { private GreeterActivitiesClient operations = new GreeterActivitiesClientImpl(); public void greet() { Promise<String> name = operations.getName(); Promise<String> greeting = operations.getGreeting(); operations.say(greeting, name); } }

A simple vista, esta implementación es muy parecida a HelloWorldWorkflow; los tres métodos de clientes de actividades se ejecutan en secuencia. No obstante, no es así para las actividades.

  • HelloWorldWorkflow ha pasado name a getGreeting. Dado que name era un objeto Promise<T>, getGreeting aplazó la ejecución de la actividad hasta que se completó getName, por lo que las dos actividades se ejecutaron en secuencia.

  • HelloWorldWorkflowParallel no pasa ningún getName o getGreeting de entrada. Ninguno de los métodos difiere la ejecución y los métodos de actividad asociados se ejecutan inmediatamente y en paralelo.

La actividad say toma greeting y name como parámetros de entrada. Dado que se trata de objetos Promise<T>, say difiere la ejecución hasta que se completan ambas actividades y, a continuación, construye e imprime el saludo.

Observe que HelloWorldWorkflowParallel no utiliza ningún código de modelado especial para definir la topología del flujo de trabajo. Lo hace de manera implícita mediante el control de flujo de Java estándar y el aprovechamiento de las propiedades de los objetos Promise<T>. Las aplicaciones de AWS Flow Framework para Java pueden implementar incluso topologías complejas solamente mediante objetos Promise<T> junto con construcciones convencionales de flujo de control de Java.

Iniciador y host de flujo de trabajo y actividades de HelloWorldWorkflowParallel

HelloWorldWorkflowParallel implementa GreeterWorker como la clase de host para implementaciones de flujo de trabajo y de actividades. Es idéntica a la implementación de HelloWorldWorkflow salvo por el nombre taskListToPoll, que se establece en "HelloWorldParallelList".

HelloWorldWorkflowParallel implementa el iniciador del flujo de trabajo en GreeterMain y es idéntica a la implementación de HelloWorldWorkflow.

Para ejecutar el flujo de trabajo, ejecute GreeterWorker y GreeterMain, de la misma manera que con HelloWorldWorkflow.