Topik ini memberikan gambaran umum dan contoh-contoh penanganan kesalahan. Anda dapat menggunakan kebijakan ulang dan tangkap untuk menangani kesalahan umum serta meningkatkan stabilitas alur kerja.
Gambaran Umum
Kesalahan yang diharapkan atau tidak terduga mungkin terjadi selama integrasi alur kerja CloudFlow. Dalam situasi ini, Anda dapat melanjutkan operasi pada status saat ini atau beralih ke status berikutnya. Kata kunci FnF.ALL adalah opsi khusus yang menangkap semua jenis kesalahan. Untuk informasi lebih lanjut tentang penggunaan kebijakan ulang dan tangkap, lihat bagian Ulang dan Tangkap.
Status yang mendukung penanganan kesalahan
Anda dapat menggunakan bidang Ulang dan Tangkap dalam definisi status berikut untuk menentukan kebijakan ulang dan tangkap serta menangani kesalahan dalam status tersebut.
CloudFlow selalu mengeksekusi kebijakan ulang terlebih dahulu saat menangani kesalahan. Jika kebijakan ulang gagal, CloudFlow akan mengeksekusi kebijakan tangkap.
Ulang
Parameter | Tipe | Diperlukan | Deskripsi | Contoh |
Kesalahan | []string | Ya | Kesalahan yang dapat terjadi. Untuk informasi lebih lanjut, lihat Jenis kesalahan umum. | -MyCustomError -FnF.ALL |
Deskripsi | string | Ya | Nama dan deskripsi kebijakan ulang. | Kebijakan ulang #1 |
MaxAttempts | int | Ya | Jumlah maksimum percobaan ulang. | 3 |
IntervalSeconds | int | Ya | Interval percobaan ulang. Nilai maksimum: 86400. Satuan: detik. | 10 |
BackoffRate | float | Tidak | Pengali dengan mana interval ulang yang ditentukan oleh parameter IntervalSeconds meningkat setelah setiap percobaan ulang. | 2 |
MaxBackoffSeconds | int | Tidak | Interval ulang maksimum selama alur kerja berjalan. Nilai maksimum: 86400. Satuan: detik. | 30 |
Jika Anda mendefinisikan beberapa aturan ulang untuk jenis kesalahan yang sama, CloudFlow hanya mencoba ulang berdasarkan aturan ulang pertama yang cocok.
Tangkap
Parameter | Tipe | Diperlukan | Deskripsi | Contoh |
Kesalahan | []string | Ya | Kesalahan yang dapat terjadi. Untuk informasi lebih lanjut, lihat Jenis kesalahan umum. | -MyCustomError -FnF.ALL |
Deskripsi | string | Ya | Nama dan deskripsi kebijakan tangkap. | Aturan tangkap kesalahan #1 |
OutputConstructor | map[string]any | Tidak | Konstruktor keluaran. Parameter ini digunakan bersama dengan parameter Next. | Lihat OutputConstructor. |
Next | string | Ya | Status ke mana alur kerja kembali ketika kesalahan tertentu ditangkap. | my-next-state |
Parameter OutputConstructor digunakan bersama dengan parameter Next. Jika terjadi kesalahan dalam suatu status, tidak ada keluaran yang dihasilkan dalam status tersebut. Alur kerja tidak dapat dilanjutkan meskipun beralih ke status berikutnya. Dalam hal ini, Anda dapat menggunakan parameter OutputConstructor untuk membangun keluaran dan menggunakannya sebagai masukan untuk status berikutnya.
Jika Anda mendefinisikan beberapa aturan tangkap untuk jenis kesalahan yang sama, CloudFlow hanya melakukan tangkapan berdasarkan aturan tangkap pertama yang cocok.
Jenis kesalahan umum
Jenis kesalahan umum berikut terjadi ketika CloudFlow diintegrasikan dengan Function Compute. Untuk informasi tentang jenis kesalahan yang terjadi ketika CloudFlow diintegrasikan dengan layanan cloud lainnya, lihat dokumentasi integrasi layanan yang sesuai.
Jenis kesalahan | Deskripsi | |||
FC.{ErrorCode} | Function Compute mengembalikan kode status HTTP selain 200. Jenis kesalahan umum:
Catatan
| |||
FC.Unknown | Function Compute memanggil fungsi tersebut, tetapi terjadi kesalahan selama eksekusi fungsi dan tidak tertangkap. Contoh kode kesalahan: | |||
{CustomError} | Kesalahan pengecualian kustom yang dilemparkan oleh penelepon, seperti kesalahan bisnis internal fungsi dan CloudFlow. | |||
FnF.TaskTimeout | Eksekusi langkah dalam alur kerja habis waktu.CloudFlow | |||
FnF.Timeout | Eksekusi keseluruhan alur kerja habis waktu.CloudFlow | |||
FnF.ALL | Sistem menangkap semua kesalahan dari CloudFlow | |||
Contoh penanganan kesalahan umum
Ulang dasar
Dalam contoh ini, jika terjadi kesalahan yang memenuhi kebijakan ulang MyCustomException1 selama pemanggilan integrasi layanan bernama my-error-handle-example, sistem akan mencoba hingga tiga kali ulang berdasarkan kebijakan ulang. Setelah tiga percobaan ulang habis, kesalahan saat ini memenuhi kebijakan tangkap MyCustomException1. Sistem membangun keluaran kesalahan kustom menggunakan parameter OutputConstructor dan menggunakan keluaran tersebut sebagai masukan untuk status ErrorCatchExit. Kemudian, alur kerja beralih ke status 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: trueSebelum menyimpan file konfigurasi YAML, Anda harus memverifikasi validitas resourceArn. Ganti resourceArn dalam resourceArn:acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST dengan ARN fungsi aktual Anda. Untuk informasi lebih lanjut tentang cara memperoleh ARN fungsi, lihat Memperoleh ARN Fungsi.
regionId: ID wilayah tempat fungsi Anda berada, seperti cn-beijing atau cn-hangzhou.
accountId: ID akun Alibaba Cloud Anda.
myfunction: nama fungsi Anda.
LATEST: versi fungsi. Anda dapat mengganti LATEST dengan versi atau alias tertentu sesuai kebutuhan bisnis Anda.
MyCustomException1: Anda dapat memodifikasi pesan kesalahan sesuai kebutuhan bisnis Anda.
Ulang mundur
Dalam contoh ini, jika terjadi kesalahan yang memenuhi kebijakan ulang MyCustomException2 atau MyCustomException3 selama pemanggilan integrasi layanan bernama my-error-handle-example, sistem akan mencoba hingga tiga kali ulang berdasarkan kebijakan ulang. Interval ulang awal adalah 5 detik. Sistem mencoba ulang pada interval 5, 10, 20, dan 40 detik berdasarkan laju mundur 2.0. Setelah tiga percobaan ulang habis, kesalahan saat ini memenuhi kebijakan tangkap MyCustomException2 atau MyCustomException3. Sistem membangun keluaran kesalahan kustom menggunakan parameter OutputConstructor dan menggunakan keluaran tersebut sebagai masukan untuk status ErrorCatchExit. Kemudian, alur kerja beralih ke status ErrorCatchExit.
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: trueKebijakan ulang kompleks
Dalam contoh ini, kebijakan ulang dan kebijakan tangkap ditentukan untuk jenis kesalahan FnF.ALL. Jika terjadi kesalahan selain MyCustomException1, MyCustomException2, dan MyCustomException3 selama pemanggilan integrasi layanan bernama my-error-handle-example, sistem akan mencoba hingga tiga kali ulang berdasarkan kebijakan ulang. Interval ulang awal adalah 5 detik. Interval mundur terakhir berdasarkan laju mundur 2.0 adalah 40 detik. Namun, interval mundur maksimum diatur menjadi 30 detik. Sistem mencoba ulang pada interval 5, 10, 20, dan 30 detik. Setelah tiga percobaan ulang habis, kesalahan saat ini memenuhi kebijakan tangkap FnF.ALL. Tidak ada keluaran kesalahan kustom yang dibangun menggunakan parameter OutputConstructor. Secara default, alur kerja beralih ke status ErrorCatchExit.
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 2
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