O Serverless Workflow se integra a diversos serviços da Alibaba Cloud, o que permite usá-los como unidades de execução em etapas de tarefa. A Flow Definition Language (FDL) define essas integrações. Em uma etapa Task, especifique o serviço de destino com resourceArn e o modo de integração com pattern.
Para obter a lista de serviços compatíveis da Alibaba Cloud, consulte Serviços da Alibaba Cloud compatíveis.
Modos de integração
O Serverless Workflow oferece suporte a três modos de integração.
-
Modo requisição/resposta: o Serverless Workflow chama um serviço de terceiros e avança para a próxima etapa após receber uma resposta HTTP. Este é o modo de integração padrão.
Em uma etapa FDL, use
resourceArnpara especificar o serviço de destino epattern: requestResponsepara definir o modo de integração. Esse parâmetro é opcional. Se omitido, o Serverless Workflow adota o modo requisição/resposta padrão e prossegue para a etapa seguinte assim que a chamada à API retornar. O exemplo abaixo utiliza um fluxo filho no qual o Serverless Workflow atua como serviço integrado.version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC # Describes the child flow. pattern: requestResponse # Describes the integration mode: default (request/response) mode. - type: pass name: dummyNeste exemplo, a etapa
testSubflowaciona o fluxoflowABC. A execução segue então para a próxima etapa,dummy, mesmo que o fluxoflowABCainda esteja em execução. -
Modo síncrono: o Serverless Workflow integra-se a serviços que fornecem uma API assíncrona para iniciar uma tarefa. Após o envio da tarefa, o Serverless Workflow aguarda sua conclusão antes de passar para a etapa seguinte.
Os serviços compatíveis com o modo síncrono geralmente expõem uma API assíncrona para iniciar tarefas. O Serverless Workflow envia a tarefa e espera que ela seja concluída antes de avançar.
Em uma etapa FDL, especifique o serviço de destino com
resourceArne defina o modo de integração usandopattern: sync. O exemplo a seguir emprega um fluxo filho onde o Serverless Workflow é o serviço integrado.version: v1 type: flow steps: - type: task name: testTask resourceArn: acs:fnf:::flow/flowABC # Describes the child flow. pattern: sync # Describes the integration mode: synchronous. - type: pass name: dummyNeste cenário, quando a etapa
testTaské executada, ela dispara o fluxoflowABC. O workflow só avança para a etapa seguinte,dummy, após a conclusão do fluxoflowABC. -
Modo de espera por callback: o Serverless Workflow chama um serviço e transmite um token de tarefa. O fluxo fica pausado até receber uma instrução de callback contendo esse token.
Para configurar esse modo em uma etapa FDL, use
resourceArnpara indicar o serviço alvo epattern: waitForCallbackpara estabelecer a integração. O exemplo abaixo demonstra o uso de um fluxo filho tendo o Serverless Workflow como serviço integrado.version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC # Describes the child flow. pattern: waitForCallback # Describes the integration mode: wait-for-callback. - type: pass name: dummyAo executar a etapa
testSubflow, o fluxoflowABCé acionado. A execução permanece pausada até que um callback seja recebido por meio da APIReportTaskSucceedouReportTaskFailed. Uma vez processado o callback, o fluxo segue para a etapadummy. Nesse intervalo, o fluxoflowABCpode ter sido finalizado ou ainda estar em andamento.
Objeto de contexto
O objeto de contexto é uma estrutura JSON interna disponível durante a execução de uma instância de fluxo. Ele contém informações sobre o fluxo e suas etapas. Use inputMappings para mapear dados desse contexto para variáveis específicas. O exemplo a seguir ilustra a estrutura do objeto de contexto.
"context": {
"flow": {
// The unique ID and name of the current flow. Both are strings.
"id": "val1",
"name": "val2"
},
"execution": {
// The name of the current execution.
"name": "val3"
},
"step": {
// The name of the current step.
"name": "val4",
// The event ID of the current step.
"eventId": "val5",
// The current loop iteration number. This is available in a foreach step.
"IterationIndex": "val6"
},
"task": {
// The identifier for this step. It is a string and is available in the wait-for-callback mode.
"token": "val7"
}
}
Por exemplo, ao integrar o serviço Serverless Workflow, talvez seja necessário recuperar informações do fluxo pai e o taskToken da etapa chamadora dentro de um fluxo filho para realizar um callback. O código abaixo demonstra como obter esses campos.
...
inputMappings:
- target: current_flow_name
source: $context.flow.name
- target: current_execution_name
source: $context.execution.name
- target: current_step_task_token
source: $context.task.token
Serviços de nuvem integrados
|
Solução |
requestResponse |
sync |
waitForCallback |
|
Function Compute (FC) |
Compatível |
Não compatível |
Não compatível |
|
Gatilho de fila do Simple Message Queue (anteriormente MNS) |
Compatível |
Não compatível |
Compatível |
|
Gatilho de tópico do Simple Message Queue (anteriormente MNS) |
Compatível |
Não compatível |
Compatível |
|
Serverless Workflow (SWF) |
Compatível |
Compatível |
Compatível |