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.
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
agetGreeting
. Dado quename
era un objetoPromise<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
ogetGreeting
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
.