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

Sinais

Sinais permitem que você insira informações em uma execução de fluxo de trabalho em andamento. Em alguns cenários, você pode querer adicionar informações a uma execução de fluxo de trabalho em andamento para informá-la de que algo mudou ou para comunicar um evento externo. Qualquer processo pode enviar um sinal para uma execução de fluxo de trabalho aberta. Por exemplo, uma execução de fluxo de trabalho pode sinalizar outra.

nota

Uma tentativa de enviar um sinal para uma execução de fluxo de trabalho que não esteja aberta resultará na falha de SignalWorkflowExecution com UnknownResourceFault.

Para usar sinais, defina o nome do sinal e os dados a serem passados para o sinal, se houver. Em seguida, programe o agente de decisão para reconhecer o evento de sinal (WorkflowExecutionSignaled) no histórico e processá-lo adequadamente. Quando um processo deseja sinalizar uma execução de fluxo de trabalho, ele faz uma chamada para o Amazon SWF (usando a ação SignalWorkflowExecution ou, no caso de um decider, usando a decisão SignalExternalWorkflowExecution) que especifica o identificador para a execução do fluxo de trabalho de destino, o nome do sinal e os dados do sinal. Em seguida, o Amazon SWF recebe o sinal, o registra no histórico da execução do fluxo de trabalho de destino e programa uma tarefa de decisão para ele. Quando o agente de decisão receber a tarefa de decisão, ele também receberá o sinal dentro do histórico de execução de fluxo de trabalho. O agente de decisão poderá então tomar as medidas apropriadas com base no sinal e seus dados.

Às vezes, convém aguardar um sinal. Por exemplo, um usuário pode cancelar um pedido enviando um sinal, mas somente dentro de uma hora após fazer o pedido. O Amazon SWF não tem uma primitiva para permitir que um decisor espere por um sinal do serviço. A funcionalidade de pausa precisa ser implementada no próprio agente de decisão. Para fazer uma pausa, o agente de decisão deve iniciar um temporizador, usando a decisão StartTimer, que especifica por quanto tempo ele aguardará o sinal enquanto continua a sondar tarefas de decisão. Quando o agente de decisão recebe uma tarefa de decisão, ele deve verificar o histórico para ver se o sinal foi recebido ou se o temporizador foi acionado. Se o sinal tiver sido recebido, o agente de decisão deverá cancelar o temporizador. No entanto, se, em vez disso, o temporizador tiver sido disparado, significa que o sinal não chegou dentro do tempo especificado. Para resumir, a fim de aguardar um sinal específico, faça o seguinte.

  1. Crie um temporizador para a quantidade de tempo que o agente de decisão deve esperar.

  2. Quando uma tarefa de decisão for recebida, verifique o histórico para ver se o sinal já chegou ou se o temporizador foi acionado.

  3. Se um sinal tiver chegado, cancele o temporizador usando uma decisão CancelTimer e processe o sinal. Dependendo do cronograma, o histórico pode conter eventos TimerFired e WorkflowExecutionSignaled. Nesses casos, você pode confiar na ordem relativa dos eventos no histórico para determinar qual ocorreu primeiro.

  4. Se o temporizador tiver sido acionado antes do recebimento de um sinal, significa que o agente de decisão atingiu o tempo limite ao aguardar esse sinal. Você pode marcar a execução como falha ou realizar qualquer outra lógica apropriada para o seu caso de uso.

Nos casos em que um fluxo de trabalho deve ser cancelado - por exemplo, o pedido em si foi cancelado pelo cliente - a ação RequestCancelWorkflowExecution deve ser usada em vez de enviar um sinal para o fluxo de trabalho.

Algumas aplicações para sinais incluem:

  • Pausar o progresso de execuções de fluxo de trabalho até que um sinal seja recebido (por exemplo, aguardar um carregamento de inventário).

  • Fornecer informações a uma execução de fluxo de trabalho que possam afetar a lógica de como os agentes de decisão tomam decisões. Isso é útil para fluxos de trabalho afetados por eventos externos (por exemplo, tentativa de finalizar a venda de uma ação após o fechamento do mercado).

  • Atualizar uma execução de fluxo de trabalho quando você antecipa que alterações possam ocorrer (por exemplo, alterar quantidades de pedidos depois que estes são efetuados e antes do envio).

No exemplo a seguir, a execução do fluxo de trabalho recebe um sinal para cancelar uma ordem.

https://swf.us-east-1.amazonaws.com SignalWorkflowExecution {"domain": "867530901", "workflowId": "20110927-T-1", "runId": "f5ebbac6-941c-4342-ad69-dfd2f8be6689", "signalName": "CancelOrder", "input": "order 3553"}

Se houver sinal na execução do fluxo de trabalho, o Amazon SWF retornará uma resposta HTTP bem-sucedida similar ao seguinte: O Amazon SWF gerará uma tarefa de decisão para informar o tomador de decisão a processar o sinal.

HTTP/1.1 200 OK Content-Length: 0 Content-Type: application/json x-amzn-RequestId: bf78ae15-3f0c-11e1-9914-a356b6ea8bdf