Aplicativo HelloWorldWorkflowParallel - AWS Flow Framework para Java

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Aplicativo HelloWorldWorkflowParallel

As versões anteriores do Hello World! usam uma topologia de fluxo linear. Contudo, o Amazon SWF não se limita a topologias lineares. O aplicativo HelloWorldWorkflowParallel é uma versão modificada do HelloWorldWorkflow que usa uma topologia paralela, conforme mostrado na figura a seguir.

Topologia do fluxo de trabalho de HelloWorldWorkflowParallel

Com o HelloWorldWorkflowParallel getName e getGreeting são executados em paralelo e cada um retorna uma parte da saudação. Em seguida, say mescla as duas strings em uma saudação, e imprime-a no console.

Para implementar o aplicativo, crie uma cópia do pacote helloWorld.HelloWorldWorkflow no diretório do projeto e chame-a de helloWorld.HelloWorldWorkflowParallel. As seções a seguir descrevem como modificar o código original de HelloWorldWorkflow para executar getName e getGreeting em paralelo.

Operador de atividades do HelloWorldWorkflowParallel

A interface de atividades do HelloWorldWorkflowParallel é implementada em GreeterActivities, conforme mostrado no exemplo a seguir.

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); }

A interface é semelhante a de HelloWorldWorkflow, com as seguintes exceções:

  • getGreeting não usa nenhuma entrada, simplesmente retorna uma sequência da saudação.

  • say usa duas sequências de entrada, a saudação e o nome.

  • A interface tem um novo número de versão que é necessário sempre que você altera uma interface registrada.

O HelloWorldWorkflowParallel implementa as atividades em GreeterActivitiesImpl, da seguinte maneira:

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 e getGreeting agora simplesmente retornam metade da string da saudação. say concatena as duas partes para produzir a frase completa e a imprime no console.

Operador do fluxo de trabalho de HelloWorldWorkflowParallel

A interface do fluxo de trabalho de HelloWorldWorkflowParallel é implementada em GreeterWorkflow, da seguinte maneira:

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(); }

A classe é idêntica à versão de HelloWorldWorkflow, exceto pelo número da versão que foi alterado para corresponder ao operador das atividades.

O fluxo de trabalho é implementado em GreeterWorkflowImpl, da seguinte maneira:

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); } }

De relance, essa implementação é muito semelhante a de HelloWorldWorkflow, os três métodos clientes de atividades são executados em sequência. No entanto, as atividades não são.

  • HelloWorldWorkflow passou name para getGreeting. Como name era um objeto Promise<T>, getGreeting adiou a execução da atividade até a conclusão de getName, portanto, as duas atividades foram executadas em sequência.

  • O HelloWorldWorkflowParallel não passa nenhuma entrada getName ou getGreeting. Nenhum dos métodos adia a execução e os métodos de atividade associados são executados imediatamente em paralelo.

A atividade say usa greeting e name como parâmetros de entrada. Como eles são objetos Promise<T>, say adia a execução até que as duas atividades sejam concluídas e, em seguida, constrói e imprime a saudação.

Observe que o HelloWorldWorkflowParallel não usa nenhum código de modelagem especial para definir a topologia do fluxo de trabalho. Ele faz isso implicitamente, usando o controle de fluxo padrão do Java e aproveitando as propriedades dos objetos Promise<T>. O AWS Flow Framework para aplicativos Java pode implementar até mesmo topologias complexas simplesmente usando objetos Promise<T> em conjunto com construções convencionais de fluxo de controle Java.

Fluxo de trabalho e host e iniciador de atividades do HelloWorldWorkflowParallel

O HelloWorldWorkflowParallel implementa GreeterWorker como a classe host para as implementações de fluxo de trabalho e de atividade. A implementação é idêntica a do HelloWorldWorkflow exceto pelo nome de taskListToPoll, que é definido como “HelloWorldParallelList”.

O HelloWorldWorkflowParallel implementa o iniciador do fluxo de trabalho em GreeterMain e é idêntica à implementação do HelloWorldWorkflow.

Para executar o fluxo de trabalho, execute GreeterWorker e GreeterMain, da mesma forma como no HelloWorldWorkflow.