[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-mikroservisy-chto-takoe-pattern-circuit-breaker":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},828,"chto-takoe-pattern-circuit-breaker",23,"mikroservisy","Микросервисы","🔗","Что такое паттерн Circuit Breaker?","Circuit Breaker (автоматический выключатель) — это паттерн отказоустойчивости, который предотвращает каскадные сбои в распределённой системе, «размыкая цепь» при обнаружении проблем с вызываемым сервисом.\n\n> Аналогия из жизни: работает как электрический автомат в квартире. При коротком замыкании (сбое сервиса) автомат срабатывает и отключает линию, чтобы не сгорела вся проводка (остальные сервисы).\n\n### Три состояния\n\n```\n   ┌─────────┐   Порог ошибок превышен   ┌──────────┐\n   │ CLOSED  │ ──────────────────────────► │   OPEN   │\n   │(нормаль)│                             │(отказ)   │\n   └────▲────┘                             └────┬─────┘\n        │                                       │\n        │ Пробный вызов успешен    Таймаут      │\n        │                         истёк         │\n   ┌────┴────────┐◄─────────────────────────────┘\n   │ HALF-OPEN   │\n   │(проверка)   │ ── Пробный вызов неуспешен ──► OPEN\n   └─────────────┘\n```\n\n- CLOSED — запросы проходят нормально. Счётчик ошибок ведётся.\n- OPEN — все запросы мгновенно возвращают fallback-ответ, не дожидаясь таймаута.\n- HALF-OPEN — пропускается ограниченное число пробных запросов. Если они успешны — CLOSED, иначе — OPEN.\n\n\u003Cdetails>\u003Csummary>Реализация с Resilience4j\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Зависимость: resilience4j-spring-boot3\n\n@Service\npublic class PaymentService {\n\n    private final CustomerClient customerClient;\n\n    @CircuitBreaker(name = \"customerService\", fallbackMethod = \"getCustomerFallback\")\n    public CustomerDto getCustomer(Long customerId) {\n        return customerClient.getCustomer(customerId);\n    }\n\n    \u002F\u002F Fallback-метод — вызывается при открытом circuit breaker\n    private CustomerDto getCustomerFallback(Long customerId, Throwable t) {\n        log.warn(\"Circuit breaker активирован для customer-service: {}\", t.getMessage());\n        return CustomerDto.builder()\n            .id(customerId)\n            .name(\"Неизвестный клиент (сервис недоступен)\")\n            .build();\n    }\n}\n```\n\n```yaml\n# application.yml — конфигурация Resilience4j\nresilience4j:\n  circuitbreaker:\n    instances:\n      customerService:\n        sliding-window-type: COUNT_BASED\n        sliding-window-size: 10\n        failure-rate-threshold: 50       # Открыть при 50% ошибок\n        wait-duration-in-open-state: 30s # Ждать 30 сек перед HALF-OPEN\n        permitted-number-of-calls-in-half-open-state: 3\n        record-exceptions:\n          - java.io.IOException\n          - java.net.SocketTimeoutException\n          - org.springframework.web.client.HttpServerErrorException\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** обязательно назовите три состояния (CLOSED, OPEN, HALF-OPEN) и объясните переходы между ними. Упомяните Resilience4j как замену устаревшего Hystrix. Частая ошибка — забыть про fallback-стратегию.","","middle",[15],"microservices",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое паттерн Circuit Breaker? — Gymterview","Circuit Breaker (автоматический выключатель) — это паттерн отказоустойчивости, который предотвращает каскадные сбои в распределённой системе, «размыкая цепь» пр","Circuit Breaker (автоматический выключатель) — это паттерн отказоустойчивости, который предотвращает каскадные сбои в ра",[15,13],"Circuit Breaker (автоматический выключатель) — это паттерн отказоустойчивости, который предотвращает каскадные сбои в распределённой системе, «размыкая цепь» при обнаружении проблем с вызываемым сервисом.",true]