CloudFlow iş akışları çalıştırma sırasında beklenen veya beklenmeyen hatalarla karşılaşabilir. Hata yönetimi, başarısız olan durumu yeniden deneyerek veya farklı bir duruma geçiş yaparak sorunsuz bir şekilde kurtulmanızı sağlar.
Birlikte çalışan iki mekanizma bulunur:
Retry -- Başarısız olan durumu otomatik olarak yeniden yürütür. Kısıtlama (throttling) veya geçici ağ sorunları gibi geçici hatalar için bu yöntemi kullanın.
Catch -- Tüm yeniden deneme girişimleri tükendiğinde hata devam ediyorsa iş akışını belirlenen bir duruma geçirir.
CloudFlow her zaman önce Retry seçeneğini değerlendirir. Yalnızca tüm yeniden deneme girişimleri başarısız olduktan sonra Catch seçeneğini değerlendirir.
Desteklenen durumlar
Aşağıdaki durum türlerine Retry ve Catch alanlarını ekleyin:
Retry
Retry alanı, yeniden deneme kurallarından oluşan bir dizi kabul eder. Her kural, hangi hataların eşleşeceğini ve yeniden denemenin nasıl yapılacağını belirtir.
| Parametre | Tür | Gerekli | Açıklama | Örnek |
|---|---|---|---|---|
Errors |
[]string | Evet | Eşleştirilecek hata türleri. Bkz. Hata türleri. | ["MyCustomError", "FnF.ALL"] |
Description |
string | Evet | Bu yeniden deneme kuralı için bir etiket. | Retry policy #1 |
MaxAttempts |
int | Evet | Maksimum yeniden deneme sayısı. | 3 |
IntervalSeconds |
int | Evet | Yeniden denemeler arasındaki ilk aralık (saniye cinsinden). Maksimum: 86.400 (24 saat). | 10 |
BackoffRate |
float | Hayır | Her girişimden sonra IntervalSeconds değerine uygulanan çarpan. Belirtilmediğinde aralık sabit kalır. |
2 |
MaxBackoffSeconds |
int | Hayır | Hesaplanan yeniden deneme aralığı için üst sınır (saniye cinsinden). Maksimum: 86.400 (24 saat). | 30 |
Birden fazla yeniden deneme kuralı aynı hata türüyle eşleşirse CloudFlow yalnızca ilk eşleşen kuralı kullanır. Daha spesifik hata türlerinin önce değerlendirilmesi için bunları FnF.ALL öncesine yerleştirin.
Catch
Catch alanı, yakalama kurallarından oluşan bir dizi kabul eder. Tüm yeniden denemelerden sonra hata devam ediyorsa CloudFlow yakalama kurallarını sırayla değerlendirir ve ilk eşleşen kuralın Next durumuna geçiş yapar.
| Parametre | Tür | Gerekli | Açıklama | Örnek |
|---|---|---|---|---|
Errors |
[]string | Evet | Eşleştirilecek hata türleri. Bkz. Hata türleri. | ["MyCustomException1", "FnF.ALL"] |
Description |
string | Evet | Bu yakalama kuralı için bir etiket. | Error catch rule #1 |
OutputConstructor |
map[string]any | Hayır | Next durumuna giriş olarak aktarılacak özel çıktıyı oluşturur. Bkz. Durum OutputConstructor. |
Aşağıdaki örneklere bakın. |
Next |
string | Evet | Hata yakalandığında geçiş yapılacak durum. | my-next-state |
OutputConstructor
Bir hata oluştuğunda başarısız durum herhangi bir çıktı üretmez. OutputConstructor olmadan sonraki durum hiçbir giriş almaz ve iş akışı anlamlı bir şekilde ilerleyemez. OutputConstructor kullanarak Next durumunun tüketebileceği yapılandırılmış bir çıktı oluşturun.
Birden fazla yakalama kuralı aynı hata türüyle eşleşirse CloudFlow yalnızca ilk eşleşen kuralı kullanır.
Hata türleri
CloudFlow hataları
Bu hatalar doğrudan CloudFlow motorundan kaynaklanır.
| Hata türü | Açıklama |
|---|---|
FnF.TaskTimeout |
İş akışındaki tek bir adım zaman aşımına uğradı. |
FnF.Timeout |
İş akışının genel yürütülmesi zaman aşımına uğradı. |
FnF.ALL |
CloudFlow'un tüm hatalarını yakalayan bir joker karakter. Daha spesifik kuralların önce değerlendirilmesi için bunu Retry veya Catch dizisindeki son giriş olarak yerleştirin. |
Function Compute hataları
Bu hatalar, CloudFlow Function Compute hizmetini çağırdığında oluşur. Diğer hizmet entegrasyonlarıyla ilgili hata türleri için ilgili hizmet belgelerine bakın.
| Hata türü | Açıklama |
|---|---|
FC.ResourceThrottled |
Yüksek eşzamanlılık nedeniyle işlevler kısıtlandı. Tüm işlevler toplam bir eşzamanlılık değeri ile sınırlıdır. CloudFlow, Task durumlarını yürüttüğünde Function Compute hizmetini senkron olarak çağırır. Toplam eşzamanlılık değeri, işlev çağrılarındaki eşzamanlılık değeri ile diğer çağrı yöntemlerinin eşzamanlılık değerlerinin toplamıdır. Senkron Function Compute çağrılarının eşzamanlılık değerini değiştirmek için istekte bulunabilirsiniz. |
FC.ResourceExhausted |
Yetersiz kaynak nedeniyle işlevler kısıtlandı. Bu sorunu çözmek için Bize ulaşın. |
FC.InternalServerError |
Function Compute içinde bir sistem hatası oluştu. İş akışını yeniden yürütün. |
FC.Unknown |
Function Compute işlevi çağırdı ancak yürütme sırasında yakalanmamış bir hata oluştu. Örnek hata kodu: UnhandledInvocationError. |
FC.{ErrorCode} |
{ErrorCode} öğesinin belirli hata kodu olduğu diğer tüm Function Compute hataları. Bkz. Function Compute hata kodları. |
Özel hatalar
| Hata türü | Açıklama |
|---|---|
{CustomError} |
Çağrılan taraf tarafından oluşturulan özel istisna hataları; örneğin, işlevlerinizdeki iş mantığı hataları. |
Örnekler
Tüm örneklerde FC:InvokeFunction aracılığıyla bir Function Compute işlevini çağıran bir Task durumu kullanılır. resourceArn yer tutucusunu gerçek işlev ARN'nizle değiştirin:
acs:fc:<region-id>:<account-id>:functions/<function-name>/<version-or-alias>
| Yer tutucu | Açıklama | Örnek |
|---|---|---|
<region-id> |
İşlevin bulunduğu bölge | cn-hangzhou |
<account-id> |
Alibaba Cloud hesap ID'si | Sayısal hesap ID'niz |
<function-name> |
İşlev adı | myfunction |
<version-or-alias> |
İşlev sürümü veya takma adı | LATEST |
İşlev ARN'sini elde etme hakkında ayrıntılı bilgi için bkz. İşlevin ARN'sini elde edin.
Temel yeniden deneme ve yakalama
Bu örnekte MyCustomException1 hatası 2 saniyelik aralıklarla en fazla 3 kez yeniden denenir. Tüm yeniden denemeler başarısız olursa yakalama kuralı özel hata çıktısı oluşturur ve ErrorCatchExit durumuna geçer.
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
Çalışma zamanında gerçekleşenler:
Task durumu
FC:InvokeFunctionişlevini çalıştırır.MyCustomException1hatası oluşursa CloudFlow, girişimler arasında 2 saniye bekleyerek en fazla 3 kez yeniden dener.Tüm yeniden denemeler başarısız olursa yakalama kuralı
MyCustomException1ile eşleşir,ErrorCodeveErrorMessageiçeren bir çıktı oluşturur veErrorCatchExitdurumuna geçer.Hata oluşmazsa iş akışı
SucceededExitdurumuna geçer.
MyCustomException1 örnek olarak kullanılmıştır. İş gereksinimlerinize göre hata adını değiştirebilirsiniz.
Geri çekilmeli yeniden deneme
Bu örnekte MyCustomException2 veya MyCustomException3 hataları üstel geri çekilme (exponential backoff) ile en fazla 3 kez yeniden denenir. İlk aralık 5 saniyedir ve her girişimden sonra iki katına çıkar (geri çekilme oranı 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
Yeniden deneme zamanlaması:
Sistem, 2,0 geri çekilme oranına dayalı olarak 5, 10, 20 ve 40 saniyelik aralıklarla yeniden deneme girişimlerinde bulunur.
Tüm yeniden denemeler başarısız olursa yakalama kuralı iş akışını ErrorCatchExit durumuna geçirir. Burada OutputConstructor tanımlanmadığından sonraki durum özel hata çıktısı almaz.
Birden fazla yeniden deneme ve yakalama ilkesi
Bu örnek, farklı yeniden deneme stratejilerine sahip üç düzeyli hata yönetimini birleştirir:
**
MyCustomException1** -- Sabit 2 saniyelik aralıklarla en fazla 3 kez yeniden dene.**
MyCustomException2veMyCustomException3** -- Üstel geri çekilme ile en fazla 3 kez yeniden dene (başlangıç: 5 sn, geri çekilme oranı: 2,0).**
FnF.ALL(tümünü yakala)** -- Üstel geri çekilme ile en fazla 3 kez yeniden dene (başlangıç: 5 sn, geri çekilme oranı: 2,0),MaxBackoffSecondsile 30 saniyede sınırla.
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
Kural eşleştirme işleyişi:
CloudFlow, yeniden deneme ve yakalama kurallarını göründükleri sırayla değerlendirir. MyCustomException1, MyCustomException2 veya MyCustomException3 ile eşleşmeyen bir hata için FnF.ALL tümünü yakalama kuralı devreye girer. FnF.ALL yeniden denemesi, aralığı sınırlamak için MaxBackoffSeconds: 30 kullanır; böylece sistem 5, 10, 20 ve 30 saniyelik aralıklarla yeniden deneme girişimlerinde bulunur.
Tüm yeniden deneme girişimleri tükendikten sonra ilgili yakalama kuralı iş akışını ErrorCatchExit durumuna geçirir.