spring cloud之斷路器hystrix(五)
1.Hystrix介紹
斷路器:Hystrix客戶端
Netflix的創造了一個呼叫的庫Hystrix實現了斷路器圖案。在微服務架構中,通常有多層服務呼叫。
圖1.微服務圖
較低階別的服務中的服務故障可能導致使用者級聯故障。當對特定服務的呼叫達到一定閾值時(Hystrix中的預設值為5秒內的20次故障),電路開啟,不進行通話。在錯誤和開路的情況下,開發人員可以提供後備。
圖2. Hystrix回退防止級聯故障
開放式電路會停止級聯故障,並允許不必要的或失敗的服務時間來癒合。回退可以是另一個Hystrix保護的呼叫,靜態資料或一個正常的空值。回退可能被連結,所以第一個回退使得一些其他業務電話又回到靜態資料。
2.專案中的使用Hystrix
要在專案中包含Hystrix,請使用組org.springframework.cloud
和artifact id spring-cloud-starter-hystrix
的啟動器。有關使用當前的Spring Cloud釋出列表設定構建系統的詳細資訊,請參閱Spring Cloud專案頁面。
示例啟動應用程式:
pom.xml中加
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud</artifactId>
<groupId>com.alen</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>hystrix-service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!--spring-cloud-starter-eureka已經引了,所以可引可不引-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<!-- 斷路器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
使用EnableCircuitBreaker
或者 EnableHystrix
表明Spring boot
工程啟用hystrix,兩個註解是等價的.
@SpringBootApplication
//通過註解@EnableEurekaClient 表明自己是一個eurekaclient.
@EnableEurekaClient
//註解開啟Hystrix
@EnableHystrix
public class HystrixApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixApplication.class, args);
}
/**
* 向程式的ioc注入一個bean: restTemplate;
* 並通過@LoadBalanced註解表明這個restRemplate開啟負載均衡的功能。
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@Service
public class HelloService {
@Autowired
RestTemplate restTemplate;
@Value("${eurekaclientURL}")
private String eurekaclientURL;
//該註解對該方法建立了熔斷器的功能,並指定了fallbackMethod熔斷方法
//有個坑 這個方法fallbackMethod = "failError"的方法引數還得和getAge原方法的一樣才行
@HystrixCommand(fallbackMethod = "failError")
public String getAge(Integer age) {
return restTemplate.getForObject(eurekaclientURL + age, String.class);
}
public String failError(Integer age) {
return "hi,"+age+",sorry,error!";
}
}
@RestController
public class HelloController {
@Autowired
private HelloService helloService;
/**
* 服務呼叫 消費者
* @param age
* @return
*/
@RequestMapping("/getage")
public String getConsumer(@RequestParam Integer age) {
return helloService.getAge(age);
}
}
失敗時結果:
hi,10,sorry,error!
3.Feign中使用斷路器
Feign是自帶斷路器的
基於service-feign工程進行改造,只需要在FeignClient的HelloService介面的註解中加上fallback的指定類就行了:
@FeignClient(value ="eureka-client",fallback = HelloServiceImpl.class)
public interface HelloService {
@RequestMapping("/hello")
//必須顯示的指定age,不顯示還不行
String hello(@RequestParam("age") Integer age);
}
HelloServiceImpl 需要實現HelloService 介面,並注入到Ioc容器中,程式碼如下:
public class HelloServiceImpl implements HelloService {
@Override
public String hello(Integer age) {
return age+"失敗";
}
}
呼叫失敗時:10失敗
這證明斷路器起到作用了。
4.Hystrix Dashboard (斷路器:Hystrix 儀表盤)
Hystrix儀表板
Hystrix的主要優點之一是它收集關於每個HystrixCommand的一套指標。Hystrix儀表板以有效的方式顯示每個斷路器的執行狀況。
基於hystrix-service 改造,Feign的改造和這一樣。
首選在pom.xml引入spring-cloud-starter-hystrix-dashboard的起步依賴:
<!--Hystrix儀表板
Hystrix的主要優點之一是它收集關於每個HystrixCommand的一套指標。
Hystrix儀表板以有效的方式顯示每個斷路器的執行狀況-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
在主程式啟動類中加入@EnableHystrixDashboard註解,開啟hystrixDashboard:
@SpringBootApplication
//通過註解@EnableEurekaClient 表明自己是一個eurekaclient.
@EnableEurekaClient
//開啟Feign的功能
@EnableFeignClients
public class FeignServiceApp {
public static void main(String[] args) {
SpringApplication.run(FeignServiceApp.class, args);
}
}
開啟瀏覽器:訪問http://localhost:8085/hystrix,介面如下:
健康指標
連線斷路器的狀態也暴露在呼叫應用程式的/health
端點中。
{
"hystrix": {
"openCircuitBreakers": [
"StoreIntegration::getStoresByLocationLink"
],
"status": "CIRCUIT_OPEN"
},
"status": "UP"
}
Hystrix指標流
要使Hystrix指標流包含對spring-boot-starter-actuator
的依賴。這將使/hystrix.stream
作為管理端點。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
5.Hystrix超時和Ribbon客戶
當使用包含Ribbon客戶端的Hystrix命令時,您需要確保您的Hystrix超時配置為長於配置的Ribbon超時,包括可能進行的任何潛在的重試。例如,如果您的Ribbon連線超時為一秒鐘,並且Ribbon客戶端可能會重試該請求三次,那麼您的Hystrix超時應該略超過三秒鐘。
參考:
http://blog.csdn.net/forezp/article/details/69934399
https://springcloud.cc/spring-cloud-dalston.html#_circuit_breaker_hystrix_clients
相關文章
- Spring Cloud(五)斷路器監控(Hystrix Dashboard)SpringCloud
- Spring Cloud Netflix—斷路器:Hystrix客戶端SpringCloud客戶端
- Spring Cloud構建微服務架構-Hystrix斷路器SpringCloud微服務架構
- Spring Cloud構建微服務架構—Hystrix斷路器SpringCloud微服務架構
- Spring Cloud:使用Hystrix實現斷路器原理詳解(下)SpringCloud
- Spring cloud(4)-熔斷(Hystrix)SpringCloud
- Spring Cloud實戰系列(四) - 熔斷器HystrixSpringCloud
- spring cloud微服務分散式雲架構(四)-斷路器(Hystrix)SpringCloud微服務分散式架構
- Spring Cloud 之 Hystrix.SpringCloud
- Spring Cloud入門教程-Hystrix斷路器實現容錯和降級SpringCloud
- 介紹Spring Cloud斷路器SpringCloud
- 7、Spring Cloud HystrixSpringCloud
- SpringCloud之斷路器聚合監控(Hystrix Turbine)SpringGCCloud
- SpringCloud(三)Hystrix斷路器SpringGCCloud
- Spring Cloud Gateway的斷路器(CircuitBreaker)功能SpringCloudGatewayUI
- 熔斷器 Hystrix 原始碼解析 —— 斷路器 HystrixCircuitBreaker原始碼UI
- (十三)spring cloud微服務分散式雲架構-服務容錯保護(Hystrix斷路器)SpringCloud微服務分散式架構
- springcloud之Hystrix熔斷器SpringGCCloud
- java spring cloud 版b2b2c社交電商-熔斷器HystrixJavaSpringCloud
- Spring Cloud 原始碼學習之 Hystrix 入門SpringCloud原始碼
- Spring Cloud 關於:Spring Cloud Netflix HystrixSpringCloud
- Spring Cloud Spring Boot mybatis 企業分散式微服務雲(九)服務容錯保護(Hystrix斷路器)【Dalston版】CloudSpring BootMyBatis分散式微服務
- Spring Cloud Hystrix應用篇(十一)SpringCloud
- Spring Cloud Hystrix原碼篇(十一)SpringCloud
- Spring Cloud Hystrix 容錯保護SpringCloud
- springcloud微服務實戰 學習筆記五 Hystrix服務降級 Hystrix依賴隔離 斷路器SpringGCCloud微服務筆記
- 微服務斷路器模式實現:Istio vs Hystrix微服務模式
- Spring Cloud Netflix—如何加入HystrixSpringCloud
- Spring Cloud Hystrix的請求合併SpringCloud
- SpringCloud原始碼學習之Hystrix熔斷器SpringGCCloud原始碼
- springcloud(五):熔斷監控Hystrix DashboardSpringGCCloud
- Hystrix斷路器在微服務閘道器中的應用微服務
- Spring Cloud Hystrix 服務容錯保護SpringCloud
- Spring Cloud Hystrix:服務容錯保護SpringCloud
- Spring Cloud中Hystrix、Ribbon及Feign的熔斷關係是什麼?SpringCloud
- Spring Cloud專題之五:configSpringCloud
- springcloud(四):熔斷器HystrixSpringGCCloud
- 微服務架構 | 5.1 使用 Netflix Hystrix 斷路器微服務架構