Circuit Breaker — паттерн отказоустойчивости. Если внешний сервис падает, circuit breaker перестаёт слать ему запросы на время, чтобы не тратить ресурсы и дать сервису восстановиться.
Три состояния:
- Closed: всё работает, запросы идут
- Open: слишком много ошибок — запросы сразу возвращают ошибку без вызова сервиса
- Half-Open: пробуем один запрос — если успешный, переходим в Closed
cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{
MaxRequests: 3,
Timeout: 10 * time.Second,
})
result, err := cb.Execute(func() (any, error) {
return http.Get("http://external-service/api")
})
Обязательен для микросервисов, где каскадные падения — реальная проблема.