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:
-
Crie um arquivo executável JAR com
GreeterActivitiesWorker
como ponto de entrada. -
Copie o arquivo JAR da Etapa 1 para outro sistema, que pode estar executando qualquer sistema operacional que suporta Java.
-
Certifique-se de que as credenciais AWS com acesso ao mesmo domínio do Amazon SWF estejam disponíveis no outro sistema.
-
Execute o arquivo JAR.
-
No sistema de desenvolvimento, use o Eclipse para executar o
GreeterWorkflowWorker
e oGreeterMain
.
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.