Resilience4j

Тема дорожной карты · Spring Boot

Паттерн Circuit Breaker — это паттерн проектирования для обеспечения отказоустойчивости, который предотвращает многократные вызовы упавшей зависимости Spring Boot-микросервисом, позволяя системе быстро реагировать на ошибки и восстанавливаться корректно. Resilience4j — рекомендуемая библиотека для реализации Circuit Breaker в Spring Boot-приложениях, интегрируемая через spring-cloud-starter-circuitbreaker-resilience4j и настраиваемая через application.yml или определения @Bean. Аннотации @CircuitBreaker, @Retry, @Bulkhead и @TimeLimiter из Resilience4j можно применять непосредственно к методам @Service, а Spring Boot автоматически настраивает CircuitBreakerRegistry, отслеживающий переходы состояний между CLOSED, OPEN и HALF_OPEN. Когда Circuit Breaker срабатывает и переходит в состояние OPEN, вызовы перенаправляются к fallback-методу, предотвращая каскадные сбои в Spring Cloud-микросервисах и повышая общую устойчивость системы. Метрики Resilience4j автоматически экспортируются в Micrometer и Prometheus, что делает состояние Circuit Breaker наблюдаемым в дашбордах Grafana наряду с другими метриками Spring Boot Actuator.

Как это работает

Resilience4j (Spring Cloud): Spring Cloud Config Server централизует конфигурацию с Git-backend + per-service refresh. Service Discovery (Eureka) был каноничным вариантом; в 2026 Kubernetes-native discovery (DNS + Services) более распространён. Spring Cloud Gateway — современный API gateway (заменяет Zuul). Resilience4j добавляет circuit breakers, retries, bulkheads, rate limits. Micrometer Tracing (заменяет Sleuth) для distributed tracing (B3 / W3C Trace Context, OpenTelemetry export).

Когда применять

На Kubernetes предпочитайте K8s-native primitives (Services, ConfigMaps, Secrets, Istio/Linkerd) перед Spring Cloud эквивалентами — меньше поддержки. Spring Cloud Config полезен для не-K8s env или как Git-backed config single source. Всегда оборачивайте внешние вызовы в circuit breakers в production. Trace IDs через каждый service-вызов — иначе debug distributed-багов безнадёжен.

Типичные ошибки

Ловушки Resilience4j: Eureka + K8s Services (дублированный discovery, оба сломаны); circuit breakers misconfigured (fail-open прячет outage); нет distributed tracing (не отладить 5-service запрос); Spring Cloud Gateway для всего (есть scaling-ограничения — proper API gateways как Kong, Envoy, Cloudflare лучше подходят).

Связанные понятия

Полезные ресурсы