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á.
Implementação de atividades
As atividades são implementadas fornecendo uma implementação da interface @Activities
. O AWS Flow Framework para Java usa as instâncias de implementação de atividade configuradas no trabalhador para processar tarefas de atividade em tempo de execução. O operador procura automaticamente a implementação de atividade do tipo apropriado.
Você pode usar propriedades e campos para passar recursos para instâncias de atividades, como conexões de banco de dados. Como o objeto de implementação de atividade pode ser acessado de vários threads, os recursos compartilhados devem ser livres de thread.
Observe que a implementação de atividade não usa parâmetros do tipo Promise<>
ou retorna objetos desse tipo. Porque a implementação da atividade não deve depender de como foi invocada (de forma síncrona ou assíncrona).
A interface de atividades mostrada antes pode ser implementada da seguinte forma:
public class MyActivitiesImpl implements MyActivities { @Override @ManualActivityCompletion public int activity1(){ //implementation } @Override public void activity2(int foo){ //implementation } }
Um contexto local de thread está disponível para a implementação de atividade que pode ser usada para recuperar o objeto da tarefa, o objeto do conversor de dados que está sendo usado etc. O contexto atual pode ser acessado por meio do ActivityExecutionContextProvider.getActivityExecutionContext()
. Para obter mais detalhes, consulte a documentação AWS SDK for Java do ActivityExecutionContext
e a seção Contexto de execução.
Conclusão manual de atividades
A anotação @ManualActivityCompletion
no exemplo acima é uma anotação opcional. É permitida somente em métodos que implementam uma atividade e é usada para configurar a atividade para não ser concluída automaticamente quando o método de atividade é retornado. Isso pode ser útil quando você deseja concluir a atividade de forma assíncrona - por exemplo, manualmente após a conclusão de uma ação humana.
Por padrão, a estrutura considera a atividade concluída quando o método da atividade é retornado. Isso significa que o trabalhador da atividade informa a conclusão da tarefa da atividade ao Amazon SWF e fornece os resultados (se houver). Contudo, há casos de uso em que você não deseja que a tarefa de atividade seja marcada como concluída quando o método da atividade é retornado. Isso é especialmente útil quando você está modelando tarefas humanas. Por exemplo, o método de atividade pode enviar um e-mail para uma pessoa que deve concluir um trabalho antes que a tarefa de atividade seja concluída. Nesses casos, você pode anotar o método de atividade com a anotação @ManualActivityCompletion
para informar ao operador de atividades de que não deve concluir a atividade automaticamente. Para concluir a atividade manualmente, você pode usar o ManualActivityCompletionClient
fornecido na estrutura ou usar o método RespondActivityTaskCompleted
no cliente Java do Amazon SWF fornecido no Amazon SWF SDK. Para obter mais detalhes, consulte a documentação do AWS SDK for Java.
Para concluir a tarefa de atividade, você precisa fornecer um token de tarefa. O token de tarefa é usado pelo Amazon SWF para identificar tarefas de forma exclusiva. Você pode acessar esse token no ActivityExecutionContext
na implementação da atividade. Você deve passar esse token para a parte responsável por concluir a tarefa. Esse token pode ser recuperado do ActivityExecutionContext
chamando ActivityExecutionContextProvider.getActivityExecutionContext().getTaskToken()
.
A atividade getName
do exemplo Hello World pode ser implementada para enviar um e-mail solicitando que alguém forneça uma mensagem de saudação:
@ManualActivityCompletion @Override public String getName() throws InterruptedException { ActivityExecutionContext executionContext = contextProvider.getActivityExecutionContext(); String taskToken = executionContext.getTaskToken(); sendEmail("abc@xyz.com", "Please provide a name for the greeting message and close task with token: " + taskToken); return "This will not be returned to the caller"; }
O trecho de código a seguir pode ser usado para fornecer a saudação e fechar a tarefa usando o ManualActivityCompletionClient
. Como alternativa, você também pode reprovar a tarefa:
public class CompleteActivityTask { public void completeGetNameActivity(String taskToken) { AmazonSimpleWorkflow swfClient = new AmazonSimpleWorkflowClient(...); // use AWS access keys ManualActivityCompletionClientFactory manualCompletionClientFactory = new ManualActivityCompletionClientFactoryImpl(swfClient); ManualActivityCompletionClient manualCompletionClient = manualCompletionClientFactory.getClient(taskToken); String result = "Hello World!"; manualCompletionClient.complete(result); } public void failGetNameActivity(String taskToken, Throwable failure) { AmazonSimpleWorkflow swfClient = new AmazonSimpleWorkflowClient(...); // use AWS access keys ManualActivityCompletionClientFactory manualCompletionClientFactory = new ManualActivityCompletionClientFactoryImpl(swfClient); ManualActivityCompletionClient manualCompletionClient = manualCompletionClientFactory.getClient(taskToken); manualCompletionClient.fail(failure); } }