Los flujos de trabajo de CloudFlow pueden presentar errores esperados o inesperados durante su ejecución. El manejo de errores permite una recuperación adecuada mediante el reintento del estado con errores o la transición a un estado distinto.
Dos mecanismos trabajan en conjunto:
Retry: vuelve a ejecutar automáticamente el estado con errores. Úselo para errores transitorios, como limitaciones de velocidad (throttling) o problemas temporales de red.
Catch: transfiere el flujo de trabajo a un estado designado cuando un error persiste después de agotar todos los reintentos.
CloudFlow siempre evalúa primero Retry. Solo después de que fallan todos los intentos de reintento evalúa Catch.
Estados compatibles
Agregue los campos Retry y Catch a los siguientes tipos de estado:
Retry
El campo Retry acepta un arreglo de reglas de reintento. Cada regla especifica qué errores coincidir y cómo reintentar.
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
Ejemplo |
|
|
[]string |
Sí |
Tipos de error que se deben coincidir. Consulte Error types. |
|
|
|
string |
Sí |
Etiqueta para esta regla de reintento. |
|
|
|
int |
Sí |
Número máximo de intentos de reintento. |
|
|
|
int |
Sí |
Intervalo inicial entre reintentos, en segundos. Máximo: 86,400 (24 horas). |
|
|
|
float |
No |
Multiplicador aplicado a |
|
|
|
int |
No |
Límite superior del intervalo de reintento calculado, en segundos. Máximo: 86,400 (24 horas). |
|
Si varias reglas de reintento coinciden con el mismo tipo de error, CloudFlow usa únicamente la primera regla coincidente. Coloque los tipos de error más específicos antes de FnF.ALL para que se evalúen primero.
Catch
El campo Catch acepta un arreglo de reglas de captura. Cuando un error persiste tras agotar todos los reintentos, CloudFlow evalúa las reglas de captura en orden y realiza la transición al estado Next de la primera regla coincidente.
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
Ejemplo |
|
|
[]string |
Sí |
Tipos de error que se deben coincidir. Consulte Error types. |
|
|
|
string |
Sí |
Etiqueta para esta regla de captura. |
|
|
|
map[string]any |
No |
Construye una salida personalizada para pasarla como entrada al estado |
Vea los ejemplos a continuación. |
|
|
string |
Sí |
Estado al que se transfiere el flujo de trabajo cuando se captura el error. |
|
OutputConstructor
Cuando ocurre un error, el estado con errores no genera ninguna salida. Sin OutputConstructor, el siguiente estado no recibe entrada y el flujo de trabajo no puede continuar de forma útil. Use OutputConstructor para construir una salida estructurada que el estado Next pueda consumir.
Si varias reglas de captura coinciden con el mismo tipo de error, CloudFlow usa únicamente la primera regla coincidente.
Tipos de error
Errores de CloudFlow
Estos errores se originan en el propio motor de CloudFlow.
|
Tipo de error |
Descripción |
|
|
Un paso individual del flujo de trabajo excedió el tiempo de espera. |
|
|
La ejecución general del flujo de trabajo excedió el tiempo de espera. |
|
|
Comodín que captura todos los errores de CloudFlow. Colóquelo como última entrada en el arreglo |
Errores de Function Compute
Estos errores ocurren cuando CloudFlow invoca Function Compute. Para conocer los tipos de error relacionados con otras integraciones de servicios, consulte la documentación del servicio correspondiente.
|
Tipo de error |
Descripción |
|
|
Funciones limitadas por alta concurrencia. Todas las funciones están restringidas por un valor total de concurrencia. CloudFlow invoca Function Compute de forma síncrona cuando ejecuta estados Task. El valor total de concurrencia es la suma del valor de concurrencia en las invocaciones de funciones y los valores de concurrencia de otros métodos de invocación. Puede solicitar modificar el valor de concurrencia de las invocaciones síncronas de Function Compute. |
|
|
Funciones limitadas por recursos insuficientes. Contact us para resolverlo. |
|
|
Error del sistema en Function Compute. Vuelva a ejecutar el flujo de trabajo. |
|
|
Function Compute invocó la función, pero ocurrió un error no capturado durante la ejecución. Código de error de ejemplo: |
|
|
Cualquier otro error de Function Compute donde |
Errores personalizados
|
Tipo de error |
Descripción |
|
|
Errores de excepción personalizados lanzados por el componente invocado, como errores de lógica de negocio en sus funciones. |
Ejemplos
Todos los ejemplos usan un estado Task que invoca una función de Function Compute mediante FC:InvokeFunction. Reemplace el marcador de posición resourceArn con el ARN real de su función:
acs:fc:<region-id>:<account-id>:functions/<function-name>/<version-or-alias>
|
Marcador de posición |
Descripción |
Ejemplo |
|
|
Región donde reside la función |
|
|
|
ID de cuenta de Alibaba Cloud |
Su ID de cuenta numérico |
|
|
Nombre de la función |
|
|
|
Versión o alias de la función |
|
Para obtener detalles sobre cómo obtener el ARN de la función, consulte Obtain the ARN of the function.
Reintento y captura básicos
Este ejemplo reintenta MyCustomException1 hasta 3 veces con intervalos de 2 segundos. Si todos los reintentos fallan, la regla de captura construye una salida de error personalizada y realiza la transición a ErrorCatchExit.
Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: an example of basic error handling
StartAt: my-error-handle-example
States:
- Type: Task
Name: my-error-handle-example
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
invocationType: Sync
body: |
xxx
Retry:
- Errors:
- MyCustomException1
Description: retry policy 1
MaxAttempts: 3
IntervalSeconds: 2
Catch:
- Errors:
- MyCustomException1
Description: catch policy 1
OutputConstructor:
ErrorCode: MyCustomException1
ErrorMessage: MyCustomException1
Next: ErrorCatchExit
Next: SucceededExit
- Type: Pass
Name: ErrorCatchExit
End: true
- Type: Pass
Name: SucceededExit
End: true
Lo que sucede durante la ejecución:
El estado Task ejecuta
FC:InvokeFunction.Si ocurre
MyCustomException1, CloudFlow reintenta hasta 3 veces y espera 2 segundos entre intentos.Si todos los reintentos fallan, la regla de captura coincide con
MyCustomException1, construye una salida conErrorCodeyErrorMessage, y realiza la transición aErrorCatchExit.Si no ocurre ningún error, el flujo de trabajo realiza la transición a
SucceededExit.
MyCustomException1 se usa como ejemplo. Modifique el nombre del error según sus requisitos de negocio.
Reintento con retroceso exponencial
Este ejemplo reintenta MyCustomException2 o MyCustomException3 hasta 3 veces con retroceso exponencial. El intervalo inicial es de 5 segundos y se duplica después de cada intento (tasa de retroceso de 2.0).
Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: an example of backoff error handling
StartAt: my-error-handle-example
States:
- Type: Task
Name: my-error-handle-example
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
body: xxx
Retry:
- Errors:
- MyCustomException2
- MyCustomException3
Description: retry policy 2
MaxAttempts: 3
IntervalSeconds: 5
BackoffRate: 2.0
Catch:
- Errors:
- MyCustomException2
- MyCustomException3
Description: catch policy 2
Next: ErrorCatchExit
Next: SucceededExit
- Type: Pass
Name: ErrorCatchExit
End: true
- Type: Pass
Name: SucceededExit
End: true
Tiempos de reintento:
El sistema intenta los reintentos con intervalos de 5, 10, 20 y 40 segundos, según la tasa de retroceso de 2.0.
Si todos los reintentos fallan, la regla de captura transfiere el flujo de trabajo a ErrorCatchExit. Aquí no se define OutputConstructor, por lo que el siguiente estado no recibe una salida de error personalizada.
Varias directivas de reintento y captura
Este ejemplo combina tres niveles de manejo de errores con distintas estrategias de reintento:
**
MyCustomException1**: reintenta hasta 3 veces con intervalos fijos de 2 segundos.**
MyCustomException2yMyCustomException3**: reintenta hasta 3 veces con retroceso exponencial (inicial: 5 s, tasa de retroceso: 2.0).**
FnF.ALL(captura general)**: reintenta hasta 3 veces con retroceso exponencial (inicial: 5 s, tasa de retroceso: 2.0), limitado a 30 segundos medianteMaxBackoffSeconds.
Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: an example of error handling
StartAt: my-error-handle-example
States:
- Type: Task
Name: my-error-handle-example
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
body: xxx
Retry:
- Errors:
- MyCustomException1
Description: retry policy 1
MaxAttempts: 3
IntervalSeconds: 2
- Errors:
- MyCustomException2
- MyCustomException3
Description: retry policy 2
MaxAttempts: 3
IntervalSeconds: 5
BackoffRate: 2.0
- Errors:
- FnF.ALL
Description: retry policy 3
MaxAttempts: 3
IntervalSeconds: 5
BackoffRate: 2.0
MaxBackoffSeconds: 30
Catch:
- Errors:
- MyCustomException1
Description: catch policy 1
OutputConstructor:
ErrorCode: MyCustomException1
ErrorMessage: MyCustomException1
Next: ErrorCatchExit
- Errors:
- MyCustomException2
- MyCustomException3
Description: catch policy 2
Next: ErrorCatchExit
- Errors:
- FnF.ALL
Description: catch policy 3
Next: ErrorCatchExit
Next: SucceededExit
- Type: Pass
Name: ErrorCatchExit
End: true
- Type: Pass
Name: SucceededExit
End: true
Funcionamiento de la coincidencia de reglas:
CloudFlow evalúa las reglas de reintento y captura en el orden en que aparecen. Para un error que no coincide con MyCustomException1, MyCustomException2 ni MyCustomException3, la regla de captura general FnF.ALL lo gestiona. El reintento de FnF.ALL usa MaxBackoffSeconds: 30 para limitar el intervalo, de modo que el sistema intenta los reintentos con intervalos de 5, 10, 20 y 30 segundos.
Una vez agotados todos los intentos de reintento, la regla de captura correspondiente transfiere el flujo de trabajo a ErrorCatchExit.