Desenvolvimento de um Activity Worker no Amazon SWF - Amazon Simple Workflow Service

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á.

Desenvolvimento de um Activity Worker no Amazon SWF

Um operador de atividade fornece a implementação de um ou mais tipos de atividades. Um activity worker se comunica com o Amazon SWF para receber tarefas de atividade e executá-las. Você pode ter uma frota de vários operadores de atividade realizando tarefas de atividade do mesmo tipo de atividade.

O Amazon SWF disponibiliza uma tarefa de atividade para os trabalhadores de atividade quando o decider agenda a tarefa de atividade. Quando um agente de decisão agenda uma tarefa de atividade, ele fornece os dados (que você determina) que o trabalhador da atividade precisa para executar a tarefa de atividade. O Amazon SWF insere esses dados na tarefa da atividade antes de enviá-los ao funcionário da atividade.

Os operadores de atividade são gerenciados por você. Eles podem ser escritos em qualquer linguagem. Um worker pode ser executado em qualquer lugar, desde que possa se comunicar com o Amazon SWF por meio da API. Como o Amazon SWF fornece todas as informações necessárias para executar uma tarefa de atividade, todos os operadores de atividade podem ser stateless. O estado stateless permite que seus fluxos de trabalho sejam altamente escaláveis. Para lidar com os maiores requisitos de capacidade, basta adicionar mais operadores de atividade.

Esta seção explica como implementar um operador de atividade. Os operadores de atividade devem fazer repetidamente o seguinte.

  1. Pesquise o Amazon SWF para obter uma tarefa de atividade.

  2. Iniciar a execução da tarefa.

  3. Relatar periodicamente um heartbeat ao Amazon SWF se a tarefa tiver vida longa.

  4. Informar que a tarefa foi concluída ou falhou e retornar os resultados para o Amazon SWF.

Sondar tarefas de atividade

Para executar tarefas de atividade, cada trabalhador de atividade deve sondar o Amazon SWF chamando periodicamente a ação PollForActivityTask.

No exemplo a seguir, o operador de atividade ChargeCreditCardWorker01 faz uma sondagem em busca de uma tarefa na lista de tarefas, ChargeCreditCard-v0.1. Se nenhuma tarefa de atividade estiver disponível, após 60 segundos, o Amazon SWF enviará de volta uma resposta vazia. Uma resposta vazia é uma estrutura Task na qual o valor do taskToken é uma string vazia.

https://swf.us-east-1.amazonaws.com PollForActivityTask { "domain" : "867530901", "taskList" : { "name": "ChargeCreditCard-v0.1" }, "identity" : "ChargeCreditCardWorker01" }

Se uma tarefa de atividade ficar disponível, o Amazon SWF a devolverá ao operador da atividade. A tarefa contém os dados que o agente de decisão especifica quando ele agenda a atividade.

Depois que um operador de atividade receber uma tarefa de atividade, ele estará pronto para realizar o trabalho. A próxima seção fornece informações sobre como realizar uma tarefa de atividade.

Realizar a tarefa de atividade

Depois de receber uma tarefa de atividade, o operador da atividade está pronto para realizá-la.

Para realizar uma tarefa de atividade
  1. Programe seu operador de atividade para interpretar o conteúdo no campo de entrada da tarefa. Esse campo contém os dados especificados pelo agente de decisão quando a tarefa foi agendada.

  2. Programe o operador de atividade para começar a processar os dados e executar sua lógica.

A próxima seção descreve como programar seus operadores de atividade para fornecer atualizações de status ao Amazon SWF para atividades de longa duração.

Informar heartbeats de tarefas de atividade

Se um tempo limite de heartbeat tiver sido registrado com o tipo de atividade, o operador de atividade deverá registrar um heartbeat antes que esse tempo limite seja excedido. Se uma tarefa de atividade não fornecer um batimento cardíaco dentro do tempo limite, a tarefa atingirá o tempo limite, o Amazon SWF a fechará e agendará uma nova tarefa de decisão para informar um agente de decisão sobre o tempo limite. Em seguida, o agente de decisão poderá reprogramar a tarefa de atividade ou realizar outra ação.

Se, após o tempo limite, o activity worker tentar entrar em contato com o Amazon SWF, por exemplo, chamando RespondActivityTaskCompleted, o Amazon SWF retornará uma falha UnknownResource.

Esta seção descreve como fornecer um heartbeat de atividade.

Para registrar um heartbeat de tarefa de atividade, programe seu operador de atividade para chamar a ação RecordActivityTaskHeartbeat. Essa ação também fornece um campo de string que você pode usar para armazenar dados de forma livre para quantificar o progresso de qualquer maneira que funcione para o seu aplicativo.

Neste exemplo, o trabalhador da atividade informa o batimento cardíaco para o Amazon SWF e usa o campo de detalhes para informar que a tarefa da atividade está 40% concluída. Para informar o heartbeat, o operador de atividade deve especificar o token da tarefa de atividade.

https://swf.us-east-1.amazonaws.com RecordActivityTaskHeartbeat { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "details" : "40" }

Por si só, essa ação não cria um evento no histórico de execução de fluxo de trabalho. Porém, se a tarefa atingir o tempo limite, o histórico de execução de fluxo de trabalho conterá um evento ActivityTaskTimedOut com as informações do último heartbeat gerado pelo operador de atividade.

Concluir ou falhar uma tarefa de atividade

Depois de executar uma tarefa, o operador de atividade deve informar se a tarefa de atividade foi concluída ou falhou.

Concluir uma tarefa de atividade

Para concluir uma tarefa de atividade, programe o operador de atividade para chamar a ação RespondActivityTaskCompleted depois que ele concluir com êxito uma tarefa de atividade, especificando o token de tarefa.

Neste exemplo, o operador de atividade indica que a tarefa foi concluída com êxito.

https://swf.us-east-1.amazonaws.com RespondActivityTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "results": "40" }

Quando a atividade é concluída, o Amazon SWF agenda uma nova tarefa de decisão para a execução do fluxo de trabalho ao qual a atividade está associada.

Programe o operador de atividade para sondar outra tarefa de atividade depois que ele concluir a tarefa em questão. Isso cria um loop em que o operador de atividade sonda tarefas e as conclui continuamente.

Se a atividade não responder dentro do período StartToCloseTimeout, ou se ScheduleToCloseTimeout tiver sido excedido, o Amazon SWF encerra a tarefa de atividade e agenda uma tarefa de decisão. Isso permite que um agente de decisão tome uma ação apropriada, como reagendar a tarefa.

Por exemplo, se uma instância do Amazon EC2 estiver executando uma tarefa de atividade e a instância falhar antes da conclusão da tarefa, o agente de decisão receberá um evento de tempo limite no histórico de execução do fluxo de trabalho. Se a tarefa de atividade estiver usando um heartbeat, o agente de decisão receberá o evento quando a tarefa não conseguir entregar o próximo heartbeat após a falha da instância do Amazon EC2. Caso contrário, o agente de decisão acabará recebendo o evento quando a tarefa de atividade não for concluída antes de atingir um de seus valores de tempo limite gerais. Em seguida, caberá ao agente de decisão reatribuir a tarefa ou tomar alguma outra medida.

Falhar uma tarefa de atividade

Se um operador de atividade não puder executar uma tarefa de atividade por algum motivo, mas ainda puder se comunicar com o Amazon SWF, você poderá programá-lo para falhar na tarefa.

Para programar um operador de atividade para marcar uma tarefa de atividade como falha, programe-o para chamar a ação RespondActivityTaskFailed, que especifica o token dessa tarefa.

https://swf.us-east-1.amazonaws.com RespondActivityTaskFailed { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "reason" : "CC-Invalid", "details" : "Credit Card Number Checksum Failed" }

Como desenvolvedor, você define os valores que são armazenados nos campos de motivo e detalhes. Essas são cadeias de caracteres de forma livre; você pode usar qualquer convenção de código de erro que sirva ao seu aplicativo. O Amazon SWF não processa esses valores. No entanto, o Amazon SWF pode exibir esses valores no console.

Quando uma tarefa de atividade falha, o Amazon SWF agenda uma tarefa de decisão para a execução do fluxo de trabalho ao qual a tarefa de atividade está associada para informar o decisor sobre a falha. Programe seu agente de decisão para lidar com atividades com falha, por exemplo, reagendando uma atividade ou marcando a execução de fluxo de trabalho como falha, dependendo da natureza da falha.

Iniciar operadores de atividade

Para iniciar operadores de atividade, empacote sua lógica em um executável que você possa usar na sua plataforma de operadores de atividade. Por exemplo, você pode empacotar o código da atividade como um executável Java que pode ser executado em servidores Linux e Windows.

Uma vez iniciados, seus operadores começarão a fazer sondagens em busca de tarefas. Porém, até que o agente de decisão agende tarefas de atividade, essas sondagens atingirão o tempo limite sem tarefas, e seus operadores apenas continuarão a realizá-las.

Como as pesquisas são solicitações de saída, o operador de atividade pode ser executado em qualquer rede que tenha acesso ao endpoint do Amazon SWF.

Você pode iniciar quantos operadores de atividade quiser. À medida que o agente de decisão agenda as tarefas de atividade, o Amazon SWF distribui automaticamente as tarefas de atividade para os trabalhadores de atividade de sondagem.