View a markdown version of this page

HelloWorldWorkflowParallel Solicitud - 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.

HelloWorldWorkflowParallel Solicitud

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 HelloWorldWorkflowParallel aplicación es una versión modificada de la HelloWorldWorkflow que utiliza una topología paralela, como se muestra en la siguiente figura.

HelloWorldWorkflowParallel topología de flujo de trabajo

Con HelloWorldWorkflowParallel, getName getGreeting se ejecutan en paralelo y cada una devuelve una parte del saludo. saya continuación, combina las dos cadenas en un saludo y lo imprime en la consola.

Para implementar la aplicación, cree una copia del World.HelloWorldWorkflow paquete hello en el directorio de su proyecto y asígnele el nombre helloWorld.HelloWorldWorkflowParallel. En las siguientes secciones se describe cómo modificar el HelloWorldWorkflow código original para que se ejecute getName y getGreeting en paralelo.

HelloWorldWorkflowParallel Trabajador de actividades

La interfaz de HelloWorldWorkflowParallel actividades se implementa enGreeterActivities, 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 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 enGreeterActivitiesImpl, 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.

HelloWorldWorkflowParallel Workflow Worker

La interfaz HelloWorldWorkflowParallel de flujo de trabajo se implementa 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 HelloWorldWorkflow versión, excepto que el número de versión se ha cambiado para que coincida con el trabajador de las 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 similar a HelloWorldWorkflow: las tres actividades que los métodos del cliente ejecutan en secuencia. No obstante, no es así para las actividades.

  • HelloWorldWorkflow pasó name agetGreeting. 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 ninguna entrada getName ogetGreeting. 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.

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

HelloWorldWorkflowParallel Flujo de trabajo y actividades: anfitrión e iniciador

HelloWorldWorkflowParallel GreeterWorkerse implementa como la clase anfitriona para las implementaciones de flujos de trabajo y actividades. Es idéntica a la HelloWorldWorkflow implementación excepto por el taskListToPoll nombre, que se establece en "HelloWorldParallelList».

HelloWorldWorkflowParallelimplementa el iniciador del flujo GreeterMain de trabajo en y es idéntico a la HelloWorldWorkflow implementación.

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