CloudFlow utiliza estados Task para invocar servicios de Alibaba Cloud y recursos externos dentro de un flujo de trabajo. El modo de integración determina cómo maneja el estado Task la respuesta del servicio: si espera de forma síncrona, si aguarda a que finalice un trabajo asíncrono o si se pausa hasta que un sistema externo envíe una devolución de llamada.
Hay tres modos de integración disponibles:
RequestComplete: envía una solicitud y espera la respuesta (predeterminado).
WaitForSystemCallback: envía una solicitud asíncrona y espera a que el sistema notifique la finalización.
WaitForCustomCallback: envía una solicitud con un token de tarea y se pausa hasta que un sistema externo devuelva la llamada con el resultado.
Elegir un modo de integración
Utilice la siguiente tabla para determinar qué modo se ajusta a su caso de uso.
|
Criterio |
RequestComplete |
WaitForSystemCallback |
WaitForCustomCallback |
|
Cuándo usarlo |
El servicio destino devuelve una respuesta síncrona |
El servicio destino ejecuta un trabajo asíncrono y notifica la finalización por sí mismo |
Un sistema externo o una acción humana debe completarse antes de que continúe el flujo de trabajo |
|
Cómo avanza el estado |
Después de recibir la respuesta |
Después de que finaliza el trabajo |
Después de llamar a |
|
Escenario típico |
Invocar una función de Function Compute de forma síncrona |
Enviar un trabajo por lotes de larga duración |
Esperar la aprobación humana o la respuesta de un microservicio externo |
|
**Valor de |
|
|
|
No todos los servicios admiten los tres modos. Para consultar la lista de compatibilidad por servicio, consulte Integration modes .
RequestComplete
RequestComplete es el modo de integración predeterminado. El estado Task envía una solicitud al servicio destino y espera la respuesta antes de avanzar al siguiente estado. Dado que la llamada es síncrona, el flujo de trabajo recibe el resultado en cuanto finaliza la invocación.
Establezca TaskMode como RequestComplete (u omítalo, ya que es el valor predeterminado):
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
Utilice WaitForSystemCallback para invocaciones asíncronas en las que el servicio destino notifica la finalización por sí mismo. El estado Task envía la solicitud y luego espera; el flujo de trabajo no avanza hasta que termina el trabajo.
Establezca 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 obtener una lista de los servicios compatibles con este modo, consulte Alibaba Cloud services that support normal integration.
Comportamiento de cancelación de tareas
Si se termina una tarea WaitForSystemCallback, es posible que CloudFlow no pueda cancelar el trabajo subyacente. Los trabajos no cancelados continúan ejecutándose y pueden generar cargos. Para evitar costos inesperados, cancele manualmente la tarea de integración.
Cuándo intenta CloudFlow la cancelación automática
CloudFlow realiza un intento de cancelación con el máximo esfuerzo en los siguientes escenarios:
Se detiene la ejecución del flujo de trabajo.
Otra rama en un estado Parallel falla con un error capturado.
Una iteración de un estado Map falla con un error no capturado.
Por ejemplo, si el flujo de trabajo contiene tareas asíncronas con flujos secundarios o funciones de Function Compute, llame a la operación de API StopExecution para detener el flujo de trabajo. CloudFlow detiene primero los flujos secundarios y después las funciones relacionadas con tareas asíncronas del flujo de trabajo.
Por qué puede fallar la cancelación
El rol de ejecución carece de los permisos obligatorios para llamar a la operación de API correspondiente.
El servicio destino no está disponible temporalmente.
WaitForCustomCallback
WaitForCustomCallback pausa el flujo de trabajo y espera a que un sistema externo notifique el resultado. Cuando se ejecuta el estado Task, genera un token de tarea que usted pasa al sistema externo. Una vez que el sistema externo termina el procesamiento, llama a la operación de API ReportTaskSucceeded o ReportTaskFailed con el token y el resultado. Entonces, el flujo de trabajo avanza al siguiente estado.
En comparación con el sondeo, las devoluciones de llamada reducen la latencia y eliminan la carga innecesaria en el servidor. Combinadas con colas de mensajes, las devoluciones de llamada amplían el alcance de orquestación de CloudFlow a todo tipo de recursos de cómputo, no solo a Function Compute.
Establezca 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
Acceder al token de tarea
Dentro del campo Parameters, utilice la expresión $Context.Current.TaskToken para acceder al token de la tarea actual. El prefijo $Context apunta al objeto de contexto de tiempo de ejecución.
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body:
payload.$: $Input
taskToken.$: $Context.Current.TaskToken
Ejemplo: verificación de crédito con un microservicio externo
Este ejemplo demuestra cómo CloudFlow se integra con un microservicio externo para realizar una verificación de crédito. El flujo de trabajo:
Invoca una función de Function Compute mediante
WaitForCustomCallback. La función envía un mensaje, que incluye el token de tarea, a Simple Message Queue (anteriormente MNS).El microservicio externo extrae el mensaje de la cola y ejecuta la verificación de crédito.
El microservicio llama a
ReportTaskSucceededoReportTaskFailedcon el token y el resultado de la verificación de crédito.CloudFlow reanuda el flujo de trabajo y avanza al siguiente 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
Ejemplo: integración con un servicio autogestionado
Utilice Simple Message Queue (anteriormente MNS) y devoluciones de llamada de API para integrar CloudFlow con un servicio autogestionado. En este patrón, Simple Message Queue actúa como intermediario entre CloudFlow y el servicio externo. El servicio externo sondea la cola en busca de tareas, las procesa y devuelve la llamada a CloudFlow con el resultado.
Este patrón no se limita a Simple Message Queue; cualquier servicio intermedio de mensajería o almacenamiento funciona como canal de comunicación.
Pasos siguientes
Modos de integración: lista de compatibilidad por servicio para cada modo de integración.
Alibaba Cloud services that support normal integration: servicios compatibles con WaitForSystemCallback.
API ReportTaskSucceeded: notificar un resultado de devolución de llamada exitoso.
API ReportTaskFailed: notificar un resultado de devolución de llamada con errores.
API StopExecution: detener una ejecución de flujo de trabajo en curso.