Боевая серия Spring Cloud (4) - Fuse Hystrix

Spring Cloud

Связанный

Связанный

  1. Spring Cloud Combat Series (1) — регистрация и обнаружение сервисов Eureka

  2. Spring Cloud Combat Series (2) — клиентский вызов + лента

  3. Spring Cloud Combat Series (3) — Декларативное притворство клиента

  4. Боевая серия Spring Cloud (4) - Fuse Hystrix

  5. Spring Cloud Combat Series (5) — Service Gateway Zuul

  6. Spring Cloud Combat Series (6) — Распределенный центр конфигурации Spring Cloud Config

  7. Spring Cloud Combat Series (7) — отслеживание служебных ссылок Spring Cloud Sleuth

  8. Spring Cloud Combat Series (8) — Мониторинг микросервисов Spring Boot Admin

  9. Spring Cloud Combat Series (9) — Аутентификация и авторизация службы Spring Cloud OAuth 2.0

  10. Практическая серия Spring Cloud (10) — Единый вход JWT и Spring Security OAuth

предисловие

В среде микросервисовSpring Cloud, ты можешь использоватьRestTemplateСотрудничатьRibbonилиFeignвыполнитьУслуги и услугимеждузвонить друг другу.

Для гарантии обслуживанияВысокая доступность,разовая услугаобычно используютРазвертывание кластера. так какПричина, по которой сеть, обслуживание не гарантируется100%изДоступность,еслиразовая услугаЕсли есть проблема, вызов этой службы появитсяблокировка потока, В это время, еслимного запросовприток,Servletконтейнерресурс потокабудет исчерпан, в результате чегоСервис вниз.

между сервисом и сервисомзависимость, сбой будет распространяться, вызывая срабатывание всей микросервисной системы.лавина.

текст

Netflixоткрытый источникHystrixкомпонент, реализующийРежим предохранителя,Spring CloudЭтот компонент является интегрированным. В микросервисной архитектуре запрос должен вызыватьнесколько услугвстречается очень часто, как показано на следующем рисунке:

НижеСервис При возникновении неисправности это приведет ккаскадный эффект неисправности. При вызове определенной службыколичество отказовдостичьПорог(Hystrixда5второй20второсортный),выключательбудет открыт.

выключательПосле открытиябазовая услугаБудет отрезан, можно избежатькаскад разломовпроблема,верхняя службаперечислитьfallbackметод напрямую возвращаетФиксированное значение.

1. Используйте предохранители на ленте

существуетpom.xmlимпортируется в файлhystrixизЗависит от запуска spring-cloud-starter-hystrix:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

Используйте в классе запуска приложения@EnableHystrixвключиhystrixфункция.

@EnableHystrix
@EnableDiscoveryClient
@SpringBootApplication
public class ServiceRibbonApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceRibbonApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

использовать аннотации@HystrixCommandОтметьте метод, который необходимо объединить при сбое вызова,fallbackMethodназначение атрибутаМетод понижения версииизимя методазаfallback.

@Service
public class HelloService {

    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "fallback")
    public String requestForHiService(String name){
        return restTemplate.getForObject("http://SERVICE-HI/hi?name=" + name, String.class);
    }

    public String fallback(String name){
        return "Fallback method invoked, name is " + name;
    }
}

2. Используйте предохранители на Feign

FeignавтономныйвыключательДа, но надоконфигурационный файлоткрыть вhystrixКонфигурация.

feign:
  hystrix:
    enabled: true

Hystrixслужба поддержкирезервный вариант пониженияоперация, когдапредохранительилиПроизошла ошибказвонок будет выполнятьсяПуть к коду по умолчанию.

@FeignClient(value = "service-hi", fallback = HelloServiceFallback.class)
public interface HelloService {
    @RequestMapping(value = "/hi", method = RequestMethod.GET)
    String sayHi(@RequestParam(value = "name") String name);
}

установивfallbackимущество для реализациирезервный вариант пониженияизсвоего рода, включить@FeignClientизсбой понижения.

@Service
public class HelloServiceFallback implements HelloService {

    @Override
    public String sayHi(String name) {
        return "Fallback method invoked, name is " + name;
    }
}

Если вам нужно получить результатрезервный триггерпричину можно указать@FeignClientвнутри аннотацииfallbackFactoryАтрибуты,fallbackFactoryсвойства иfallbackСвойства нельзя использовать вместе.

@FeignClient(value = "service-hi", fallbackFactory = HelloServiceFallbackFactory.class)
public interface HelloService {
    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    String sayHi(@RequestParam(value = "name") String name);
}

затем предоставитьFallbackFactoryизКласс реализации, класс реализации указываетобщий параметрзаHelloService.

@Component
public class HelloServiceFallbackFactory implements FallbackFactory<HelloService> {

    @Override
    public HelloService create(Throwable throwable) {
        return new HelloService() {
            @Override
            public String sayHi(String name) {
                return "Fallback method invoked, name is "
                         + name + ", message is " + throwable.getMessage();
            }
        };
    }
}

3. Hystrix Dashboard отслеживает состояние автоматических выключателей.

Hystrix DashboardЯвляетсяКонтрольные предохранителикомпонентов состояния, обеспечиваетМониторинг данныхиграфический интерфейс.

3.1. Использование Hystrix Dashboard с лентой

в присоединенииspring-cloud-starter-hystrixНа основе зависимостей добавьте следующие зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>

в приложениистартовый классуже добавлено@EnableHystrixна основе добавления@EnableHystrixDashboardОбратите внимание, код выглядит следующим образом:

@EnableHystrix
@EnableHystrixDashboard
@EnableDiscoveryClient
@SpringBootApplication
public class ServiceRibbonApplication {
}

Запустите приложение, посетитеhttp://localhost:8765/hystrix.stream, вы можете просмотретьпредохранительизИндикаторы данных. доступhttp://localhost:8765/hystrix,ПроверятьHystrix Dashboardинтерфейс. Заполните интерфейсИндикаторы данныхизURLадрес, нажмитеMonitor StreamВойдите на страницу, как показано на рисунке:

3.2 Использование Hystrix Dashboard в Feign

в присоединенииspring-cloud-starter-hystrixНа основе зависимостей добавьте следующие зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>

добавить на стартер@EnableHystrixDashboard аннотациявключиHystrix Dashboard, полный код выглядит следующим образом:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableHystrixDashboard
@EnableHystrix
public class ServiceFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceFeignApplication.class, args);
    }
}

Выполните указанные выше два шага настройки, вы можете открытьFeignизHystrix DashboardФункции.

Ссылаться на

  • Фан Чжипэн «глубокое понимание Spring Cloud Service и построение микро»

Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack

零壹技术栈

Эта учетная запись будет продолжать делиться сухими продуктами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.