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.
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
paragetGreeting
. Comoname
era um objetoPromise<T>
,getGreeting
adiou a execução da atividade até a conclusão degetName
, portanto, as duas atividades foram executadas em sequência. -
O HelloWorldWorkflowParallel não passa nenhuma entrada
getName
ougetGreeting
. 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
.