Связанный
Связанный
-
Spring Cloud Combat Series (1) — регистрация и обнаружение сервисов Eureka
-
Spring Cloud Combat Series (3) — Декларативное притворство клиента
-
Spring Cloud Combat Series (6) — Распределенный центр конфигурации Spring Cloud Config
-
Spring Cloud Combat Series (7) — отслеживание служебных ссылок Spring Cloud Sleuth
-
Spring Cloud Combat Series (8) — Мониторинг микросервисов Spring Boot Admin
-
Spring Cloud Combat Series (9) — Аутентификация и авторизация службы Spring Cloud OAuth 2.0
-
Практическая серия 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
Эта учетная запись будет продолжать делиться сухими продуктами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.