Связанный
Связанный
-
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
Эта учетная запись будет продолжать делиться сухими продуктами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.