Ответ
Состояния Circuit Breaker:
- Closed - нормальная работа, запросы проходят. При превышении ошибок переходит в Open.
- Open - все запросы сразу отклоняются. Через таймаут переходит в Half-Open.
- Half-Open - пробует пропустить часть запросов. При успехе - Closed, при ошибках - Open.
Пример на Go с библиотекой sony/gobreaker:
cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "my-service",
Timeout: 5 * time.Second,
})
_, err := cb.Execute(func() (interface{}, error) {
// Вызов внешнего сервиса
return http.Get("https://api.example.com")
})