Workflows do CloudFlow podem apresentar erros esperados ou inesperados durante a execução. O tratamento de erros permite uma recuperação adequada ao tentar novamente o estado com falha ou ao fazer a transição para um estado diferente.
Dois mecanismos atuam em conjunto:
Retry -- Reexecuta automaticamente o estado com falha. Use esta opção para erros transitórios, como limitação de taxa (throttling) ou problemas temporários de rede.
Catch -- Transfere o workflow para um estado designado quando um erro persiste após o esgotamento de todas as tentativas de reexecução.
O CloudFlow sempre avalia primeiro o Retry. A avaliação do Catch ocorre somente após a falha de todas as tentativas de reexecução.
Estados compatíveis
Adicione os campos Retry e Catch aos seguintes tipos de estado:
Retry
O campo Retry aceita um array de regras de nova tentativa. Cada regra especifica quais erros corresponder e como tentar novamente.
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
|
[]string |
Sim |
Tipos de erro a serem correspondidos. Consulte Tipos de erro. |
|
|
|
string |
Sim |
Rótulo desta regra de nova tentativa. |
|
|
|
int |
Sim |
Número máximo de tentativas de reexecução. |
|
|
|
int |
Sim |
Intervalo inicial entre novas tentativas, em segundos. Máximo: 86.400 (24 horas). |
|
|
|
float |
Não |
Multiplicador aplicado ao |
|
|
|
int |
Não |
Limite superior para o intervalo calculado de nova tentativa, em segundos. Máximo: 86.400 (24 horas). |
|
Se várias regras de nova tentativa corresponderem ao mesmo tipo de erro, o CloudFlow usará apenas a primeira regra correspondente. Posicione tipos de erro mais específicos antes de FnF.ALL para garantir que sejam avaliados primeiro.
Catch
O campo Catch aceita um array de regras de captura. Quando um erro persiste após todas as novas tentativas, o CloudFlow avalia as regras de captura em ordem e faz a transição para o estado Next da primeira regra correspondente.
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
|
[]string |
Sim |
Tipos de erro a serem correspondidos. Consulte Tipos de erro. |
|
|
|
string |
Sim |
Rótulo desta regra de captura. |
|
|
|
map[string]any |
Não |
Constrói uma saída personalizada para passar como entrada ao estado |
Veja os exemplos abaixo. |
|
|
string |
Sim |
Estado de destino da transição quando o erro for capturado. |
|
OutputConstructor
Quando ocorre um erro, o estado com falha não produz saída. Sem o OutputConstructor, o próximo estado não recebe entrada e o workflow não consegue prosseguir adequadamente. Use o OutputConstructor para criar uma saída estruturada que o estado Next possa consumir.
Se múltiplas regras de captura corresponderem ao mesmo tipo de erro, o CloudFlow usa apenas a primeira regra correspondente.
Tipos de erro
Erros do CloudFlow
Esses erros têm origem no próprio mecanismo do CloudFlow.
|
Tipo de erro |
Descrição |
|
|
Uma única etapa no workflow atingiu o tempo limite. |
|
|
A execução geral de um workflow atingiu o tempo limite. |
|
|
Curinga que captura todos os erros do CloudFlow. Coloque esta opção como a última entrada no array |
Erros do Function Compute
Esses erros ocorrem quando o CloudFlow invoca o Function Compute. Para tipos de erro relacionados a outras integrações de serviço, consulte a documentação do serviço correspondente.
|
Tipo de erro |
Descrição |
|
|
Funções limitadas devido à alta concorrência. Todas as funções são limitadas por um valor total de concorrência. O CloudFlow invoca sincronamente o Function Compute ao executar estados Task. O valor total de concorrência é a soma da concorrência nas invocações de função e dos valores de concorrência de outros métodos de invocação. Você pode solicitar a modificação do valor de concorrência das invocações síncronas do Function Compute. |
|
|
Funções limitadas devido a recursos insuficientes. Entre em contato conosco para resolver este problema. |
|
|
Erro de sistema no Function Compute. Execute novamente o workflow. |
|
|
O Function Compute invocou a função, mas ocorreu um erro não capturado durante a execução. Código de erro de exemplo: |
|
|
Qualquer outro erro do Function Compute em que |
Erros personalizados
|
Tipo de erro |
Descrição |
|
|
Exceções personalizadas lançadas pelo chamado, como erros de lógica de negócios em suas funções. |
Exemplos
Todos os exemplos usam um estado Task que invoca uma função do Function Compute via FC:InvokeFunction. Substitua o espaço reservado resourceArn pelo ARN real da sua função:
acs:fc:<region-id>:<account-id>:functions/<function-name>/<version-or-alias>
|
Espaço reservado |
Descrição |
Exemplo |
|
|
Região onde a função reside |
|
|
|
ID da conta Alibaba Cloud |
Seu ID numérico de conta |
|
|
Nome da função |
|
|
|
Versão ou alias da função |
|
Para obter detalhes sobre como obter o ARN da função, consulte Obter o ARN da função.
Retry e catch básicos
Este exemplo tenta novamente MyCustomException1 até 3 vezes com intervalos de 2 segundos. Se todas as tentativas falharem, a regra de captura constrói uma saída de erro personalizada e faz a transição para 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
Comportamento em tempo de execução:
O estado Task executa
FC:InvokeFunction.Se ocorrer
MyCustomException1, o CloudFlow tentará novamente até 3 vezes, aguardando 2 segundos entre as tentativas.Se todas as tentativas falharem, a regra de captura corresponderá a
MyCustomException1, construirá uma saída comErrorCodeeErrorMessagee fará a transição paraErrorCatchExit.Na ausência de erros, o workflow fará a transição para
SucceededExit.
MyCustomException1 é usado como exemplo. Modifique o nome do erro conforme seus requisitos de negócios.
Retry com backoff
Neste exemplo, há novas tentativas para MyCustomException2 ou MyCustomException3 até 3 vezes com backoff exponencial. O intervalo inicial é de 5 segundos e dobra após cada tentativa (taxa de backoff 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
Temporização das novas tentativas:
O sistema realiza tentativas em intervalos de 5, 10, 20 e 40 segundos com base na taxa de backoff de 2,0.
Se todas as tentativas falharem, a regra de captura transferirá o workflow para ErrorCatchExit. Nenhum OutputConstructor está definido aqui; portanto, o próximo estado não recebe saída de erro personalizada.
Múltiplas políticas de retry e catch
Este exemplo combina três níveis de tratamento de erros com diferentes estratégias de nova tentativa:
**
MyCustomException1** -- Nova tentativa até 3 vezes com intervalos fixos de 2 segundos.**
MyCustomException2eMyCustomException3** -- Nova tentativa até 3 vezes com backoff exponencial (inicial: 5s, taxa de backoff: 2,0).**
FnF.ALL(captura geral)** -- Nova tentativa até 3 vezes com backoff exponencial (inicial: 5s, taxa de backoff: 2,0), limitado a 30 segundos porMaxBackoffSeconds.
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
Funcionamento da correspondência de regras:
O CloudFlow avalia as regras de nova tentativa e de captura na ordem em que aparecem. Para um erro que não corresponda a MyCustomException1, MyCustomException2 ou MyCustomException3, a regra de captura geral FnF.ALL cuidará dele. A nova tentativa do FnF.ALL usa MaxBackoffSeconds: 30 para limitar o intervalo, então o sistema realiza tentativas em intervalos de 5, 10, 20 e 30 segundos.
Após o esgotamento de todas as tentativas, a regra de captura correspondente transfere o workflow para ErrorCatchExit.