O CloudFlow usa estados Task para invocar serviços da Alibaba Cloud e recursos externos em um workflow. O modo de integração define como o estado Task processa a resposta do serviço: aguardar sincronamente, esperar a conclusão de um job assíncrono ou pausar até que um sistema externo envie um callback.
Há três modos de integração disponíveis:
RequestComplete: envia uma solicitação e aguarda a resposta (padrão).
WaitForSystemCallback: envia uma solicitação assíncrona e espera o sistema reportar a conclusão.
WaitForCustomCallback: envia uma solicitação com um token de tarefa e pausa até que um sistema externo retorne o resultado via callback.
Escolha um modo de integração
Use a tabela a seguir para identificar o modo adequado ao seu caso de uso.
|
Critério |
RequestComplete |
WaitForSystemCallback |
WaitForCustomCallback |
|
Quando usar |
O serviço de destino retorna uma resposta síncrona |
O serviço de destino executa um job assíncrono e reporta a conclusão automaticamente |
Um sistema externo ou ação humana precisa ser concluído antes que o workflow continue |
|
Como o estado avança |
Após a chegada da resposta |
Após a conclusão do job |
Após a chamada de |
|
Cenário típico |
Invocar uma função do Function Compute sincronamente |
Enviar um job em lote de longa duração |
Aguardar aprovação humana ou um microsserviço externo |
|
**Valor de |
|
|
|
Nem todos os serviços são compatíveis com os três modos. Para verificar a lista de compatibilidade por serviço, consulte Modos de integração .
RequestComplete
RequestComplete é o modo de integração padrão. O estado Task envia uma solicitação ao serviço de destino e aguarda a resposta antes de avançar para o próximo estado. Como a chamada é síncrona, o workflow recebe o resultado assim que a invocação termina.
Defina TaskMode como RequestComplete (ou omita esse parâmetro, pois é o valor padrão):
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation.
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Sync
body: xxxx
End: true
WaitForSystemCallback
Use WaitForSystemCallback para invocações assíncronas nas quais o serviço de destino reporta a conclusão automaticamente. O estado Task envia a solicitação e entra em espera; o workflow não avança até que o job termine.
Defina TaskMode como WaitForSystemCallback e invocationType como Async:
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation.
Action: FC:InvokeFunction
TaskMode: WaitForSystemCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body: xxxx
End: true
Para obter uma lista de serviços compatíveis com este modo, consulte Serviços da Alibaba Cloud que suportam integração normal.
Comportamento de cancelamento de tarefas
Se uma tarefa WaitForSystemCallback for encerrada, o CloudFlow pode não conseguir cancelar o job subjacente. Jobs não cancelados continuam em execução e podem gerar cobranças. Para evitar custos inesperados, cancele manualmente a tarefa de integração.
Quando o CloudFlow tenta o cancelamento automático
O CloudFlow tenta cancelar a tarefa com melhor esforço nos seguintes cenários:
A execução do workflow é interrompida.
Outra ramificação em um estado Parallel falha com um erro capturado.
Uma iteração de um estado Map falha com um erro não capturado.
Por exemplo, se o workflow contiver tarefas assíncronas com fluxos filhos ou funções do Function Compute, chame a operação de API StopExecution para interromper o workflow. O CloudFlow interrompe primeiro os fluxos filhos e, em seguida, as funções relacionadas às tarefas assíncronas no workflow.
Motivos pelos quais o cancelamento pode falhar
A função de execução não tem as permissões necessárias para chamar a operação de API correspondente.
O serviço de destino está temporariamente indisponível.
WaitForCustomCallback
O modo WaitForCustomCallback pausa o workflow e aguarda que um sistema externo reporte o resultado. Quando o estado Task é executado, ele gera um token de tarefa que você deve passar ao sistema externo. Após concluir o processamento, o sistema externo chama a operação de API ReportTaskSucceeded ou ReportTaskFailed com o token e o resultado. O workflow então avança para o próximo estado.
Em comparação com o polling, os callbacks reduzem a latência e eliminam carga desnecessária no servidor. Combinados com filas de mensagens, os callbacks estendem o escopo de orquestração do CloudFlow para todos os tipos de recursos de computação, não apenas para o Function Compute.
Defina TaskMode como WaitForCustomCallback:
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation.
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Sync
body: xxxx
End: true
Acesse o token de tarefa
No campo Parameters, use a expressão $Context.Current.TaskToken para acessar o token da tarefa atual. O prefixo $Context aponta para o objeto de contexto de tempo de execução.
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body:
payload.$: $Input
taskToken.$: $Context.Current.TaskToken
Exemplo: verificação de crédito com um microsserviço externo
Este exemplo demonstra como o CloudFlow se integra a um microsserviço externo para verificar crédito. O workflow executa as seguintes etapas:
Invoca uma função do Function Compute usando
WaitForCustomCallback. A função envia uma mensagem, incluindo o token de tarefa, para o Simple Message Queue (anteriormente MNS).O microsserviço externo consome a mensagem da fila e executa a verificação de crédito.
O microsserviço chama
ReportTaskSucceededouReportTaskFailedcom o token e o resultado da verificação de crédito.O CloudFlow retoma o workflow e avança para o próximo estado.
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation.
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body:
payload.$: $Input
taskToken.$: $Context.Current.TaskToken
End: true
Exemplo: integração com um serviço autogerenciado
Use o Simple Message Queue (anteriormente MNS) e callbacks de API para integrar o CloudFlow a um serviço autogerenciado. Nesse padrão, o Simple Message Queue atua como intermediário entre o CloudFlow e o serviço externo. O serviço externo consulta a fila em busca de tarefas, processa-as e retorna o resultado ao CloudFlow via callback.
Esse padrão não se limita ao Simple Message Queue; qualquer serviço intermediário de mensagens ou armazenamento funciona como canal de comunicação.
Próximos passos
Modos de integração: lista de compatibilidade por serviço para cada modo de integração.
Serviços da Alibaba Cloud que suportam integração normal: serviços compatíveis com WaitForSystemCallback.
API ReportTaskSucceeded: reporta um resultado de callback bem-sucedido.
API ReportTaskFailed: reporta um resultado de callback com falha.
API StopExecution: interrompe uma execução de workflow em andamento.