Circuit breaker
- Kotlin kursu
- İleri seviye
- Ders 71/83
- 5 dk
Circuit breaker deseni öğrenirsin.
Circuit breaker
Bir circuit breaker, art arda başarısız olan bir çağrıyı geçici olarak durdurur. Üç durum vardır: closed (normal), open (çağrı reddedilir) ve half-open (deneme).
Örnek: class CircuitBreaker(val threshold: Int). Başarısızlık sayısı threshold'a ulaşınca devre open olur; çağrılar reddedilir. Bu kalıp, başarısız bir bağımlılığın tüm sistemi çekmemesi için kullanılır. Belirli bir süre sonra half-open ile deneme yapılır.
Threshold ve open durumu
Başarısızlık sayısı threshold'a ulaşınca devre open olur. open durumda çağrılar hemen reddedilir; gerçek işlem yapılmaz. Bu, dış hizmet hatalıyken yükü azaltır.
Örnek: threshold = 2. İki başarısız çağrıdan sonra devre open olur. Üçüncü çağrı işlem yapmaz; "open" döner. Bu kalıp, hata birikimini önler ve sistem toparlanma süresi kazandırır.
Uygulama CircuitBreaker sınıfını yaz
class CircuitBreaker(val threshold: Int) tanımla; var failures = 0 ve var open = false olsun. fun execute(action: () -> String): String metodu yaz: open ise "open" döndürsün; action'ı çağırıp başarılı olursa sonucunu, exception olursa failures'ı artırıp threshold'a ulaşınca open = true yapıp "error" döndürsün. main içinde CircuitBreaker(2) ile üç execute { throw RuntimeException() } çağrısının sonuçlarını yazdır.
Başlangıç kodu
// CircuitBreaker sınıfı: threshold, failures, open
// execute: open ise open, action başarılı ise sonuç, exception ise error
// main'de üç hatalı çağrı sonucunu yazdırÖrnek çözüm
class CircuitBreaker(val threshold: Int) {
var failures = 0
var open = false
fun execute(action: () -> String): String {
if (open) return "open"
return try {
action()
} catch (e: Exception) {
failures++
if (failures >= threshold) open = true
"error"
}
}
}
fun main() {
val cb = CircuitBreaker(2)
println(cb.execute { throw RuntimeException() })
println(cb.execute { throw RuntimeException() })
println(cb.execute { "ok" })
}Beklenen çıktı
error error open
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 CircuitBreaker tanımını tamamla
____ CircuitBreaker(val threshold: Int)
class CircuitBreaker(val threshold: Int)
Açıklama: class CircuitBreaker bir sınıf tanımlar.
2 Circuit breaker parçalarını eşle
| Kavram | Anlamı |
|---|---|
threshold |
Başarısızlık eşiği |
closed |
Normal durum |
open |
Çağrı reddi |
half-open |
Deneme |
3 Circuit breaker open durumundayken ne olur?
- Tüm çağrılar başarılı olur
- Çağrılar reddedilir Doğru cevap
- Sistem yeniden başlar
- Threshold sıfırlanır
Açıklama: Open durumda çağrılar hemen reddedilir.