Aplicativo HelloWorldWorkflowDistributed - 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 HelloWorldWorkflowDistributed

Com o HelloWorldWorkflow e o HelloWorldWorkflowAsync, o Amazon SWF medeia a interação entre o fluxo de trabalho e as implementações de atividades, mas eles são executados localmente como um único processo. O GreeterMain está em um processo separado, mas ainda é executado no mesmo sistema.

Um recurso importante do Amazon SWF é que ele oferece suporte a aplicativos distribuídos. Por exemplo, você pode executar o workflow worker em uma instância do Amazon EC2, o workflow starter em um computador do data center e as atividades em um computador desktop cliente. Você pode ainda executar atividades diferentes em sistemas diferentes.

O aplicativo HelloWorldWorkflowDistributed estende o HelloWorldWorkflowAsync para distribuir a aplicação entre dois sistemas e três processos.

  • O fluxo de trabalho e o acionador do fluxo de trabalho são executados como processos separados em um sistema.

  • As atividades são executadas em um sistema separado.

Para implementar o aplicativo, crie uma cópia do pacote helloWorld.HelloWorldWorkflowAsync em seu diretório de projetos e chame-a de helloWorld.HelloWorldWorkflowDistributed. As seções a seguir descrevem como modificar o código original do HelloWorldWorkflowAsync para distribuir a aplicação entre dois sistemas e três processos.

Não é necessário alterar as implementações do fluxo de trabalho ou das atividades para executá-los em sistemas separados, nem mesmo os números de versão. Também não é necessário modificar o GreeterMain. Mude apenas o host das atividades e do fluxo de trabalho.

Com o HelloWorldWorkflowAsync, um único aplicativo serve como host do fluxo de trabalho e da atividade. Para executar as implementações do fluxo de trabalho e de atividade em sistemas separados, é necessário implementar aplicativos separados. Exclua o GreeterWorker do projeto e adicione dois novos arquivos de classe, GreeterWorkflowWorker e GreeterActivitiesWorker.

O HelloWorldWorkflowDistributed implementa seu host de atividades no GreeterActivitiesWorker, da seguinte forma:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.ActivityWorker; public class GreeterActivitiesWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); } }

O HelloWorldWorkflowDistributed implementa seu host do fluxo de trabalho no GreeterWorkflowWorker, da seguinte forma:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.WorkflowWorker; public class GreeterWorkflowWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; WorkflowWorker wfw = new WorkflowWorker(service, domain, taskListToPoll); wfw.addWorkflowImplementationType(GreeterWorkflowImpl.class); wfw.start(); } }

Observe que o GreeterActivitiesWorker é apenas GreeterWorker sem o código WorkflowWorker e o GreeterWorkflowWorker é apenas GreeterWorker sem o código ActivityWorker.

Para executar o fluxo de trabalho:
  1. Crie um arquivo executável JAR com GreeterActivitiesWorker como ponto de entrada.

  2. Copie o arquivo JAR da Etapa 1 para outro sistema, que pode estar executando qualquer sistema operacional que suporta Java.

  3. Certifique-se de que as credenciais AWS com acesso ao mesmo domínio do Amazon SWF estejam disponíveis no outro sistema.

  4. Execute o arquivo JAR.

  5. No sistema de desenvolvimento, use o Eclipse para executar o GreeterWorkflowWorker e o GreeterMain.

Além do fato das atividades estarem sendo executadas em um sistema diferente daquele do operador do fluxo de trabalho e do acionador do fluxo de trabalho, o fluxo de trabalho funciona exatamente da mesma forma que o HelloWorldAsync. No entanto, porque a chamada println que imprime "Olá mundo!" para que o console esteja na atividade say, a saída aparecerá no sistema que está executando o trabalhador de atividades.