Xəta verən servisə davamlı zəng etməyib, dövrəni "qırmaqla" sistemin çökməsinin qarşısını alır — evin elektrik sigortası kimi.
Bir servis çökəndə ona davamlı zəng etmək Thread Pool-u bitirər və bütün sistemi "zəhərləyər" (Cascading Failure).
CLOSED: Normal işləyir. OPEN: Zəng etmir, dərhal fallback verir. HALF-OPEN: Bəlkə düzəlib? — test edir.
Resilience4j, Hystrix (deprecated), Spring Cloud Circuit Breaker, Polly (.NET).
Bütün istəklər keçir. Xəta sayğacı tutulur. Xəta həddi keçsə → OPEN-ə keçir.
Heç bir istək keçmir. Dərhal Fallback cavab qaytarılır. Müəyyən müddət gözlənilir.
Gözləmə bitsə, bir neçə test istəyi göndərilir. Uğurlu olsa → CLOSED. Xəta olsa → OPEN.
@Service
public class OrderService {
private final PaymentClient paymentClient;
// Circuit Breaker konfiqurasiyası:
// failureRateThreshold=50 → 50% xəta olsa OPEN olur
// waitDurationInOpenState=10s → 10 san gözlər, sonra HALF-OPEN
// slidingWindowSize=10 → Son 10 istəyə baxır
@CircuitBreaker(name = "paymentCB", fallbackMethod = "paymentFallback")
public PaymentResponse processPayment(OrderRequest order) {
// Normal gediş → Payment Service-ə zəng
return paymentClient.charge(order.getAmount());
}
// Circuit OPEN olduqda bu çağırılır
public PaymentResponse paymentFallback(OrderRequest order, Throwable t) {
return new PaymentResponse("PENDING",
"Payment servisi hazırda əlçatmazdır. Sifariş gözləmədə.");
}
}
resilience4j:
circuitbreaker:
instances:
paymentCB:
failureRateThreshold: 50 # 50%-dən çox xəta
waitDurationInOpenState: 10s # OPEN-də 10 san gözlə
slidingWindowSize: 10 # Son 10 istəyə görə qərar ver
permittedNumberOfCallsInHalfOpenState: 3 # HALF-OPEN-da 3 test