CodeBlanks Logo Icon CodeBlanks

Circuit breaker

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

Main.kt
// 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

Main.kt
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

Soru
____ CircuitBreaker(val threshold: Int)
Cevap
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.

İleri seviye bölümündeki tüm dersler