Implementação de atividades - 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á.

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