Hystrix-服務降級
阿新 • • 發佈:2021-10-14
目錄
服務降級:
服務熔斷是服務端出現異常或服務響應超時,對方法進行熔斷及使用備用
服務降級是客戶端從整體網站請求負載考慮,當某個服務熔斷或關閉之後,服務將不再被呼叫,此時在客戶端,我們可以準備一個FallbackFactory,返回一個預設值(預設值)做出處理不影響客戶端執行使用,服務水平降低,但比直接掛掉好
使用Feign的服務端:
建立降級服務類,實現降級工廠介面FallbackFactory,重寫方法,方法返回客戶端介面
工廠介面是feign.hystrix包內的
package com.stt.springcloud.service; import com.stt.springcloud.pojo.Dept; import feign.hystrix.FallbackFactory; import org.springframework.stereotype.Component; import java.util.List; // 降級 @Component // 注入容器 public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> { @Override public DeptClientService create(Throwable throwable) { // 返回介面實現方法,並提示降級資訊 return new DeptClientService() { @Override public Dept queryById(Long id) { return new Dept() .setDeptno(id) .setDname("id=>"+id+"沒有對應資訊,客戶端提供了降級提示資訊,這個服務已經關閉") .setDb_source("沒有資料"); } @Override public List<Dept> queryAll() { return null; } @Override public boolean addDept(Dept dept) { return false; } }; } }
介面:
在註解@FeignClient內新增降級提示類
@Component // 指定降級的類 @FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT", fallbackFactory = DeptClientServiceFallbackFactory.class) public interface DeptClientService { @GetMapping("/dept/get/{id}") public Dept queryById(@PathVariable("id") Long id); @GetMapping("/dept/list") public List<Dept> queryAll(); @PostMapping("/dept/add") public boolean addDept(Dept dept); }
配置類:
# 開啟降級feign.hystrix
feign:
hystrix:
enabled: true
小結:
Feign對服務提供者宣告可以是用的介面有哪些,服務消費者通過Feign可以呼叫提供者的介面方法,Hystrix服務降級對這些宣告的介面做故障處理,在服務提供者發生故障,而消費者通過Feign可以得到預設值。表示服務不可用。
Dashboard流監控:
建立hystrix-dashboard監控客戶端:
匯入依賴:
主要Hystrix依賴與dashboard監控頁面依賴
<!--實體類+web--> <dependencies> <!--Hystrix依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--dashboard監控頁面依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.4.6.RELEASE</version> </dependency> <dependency> <groupId>com.stt</groupId> <artifactId>springcloud-api</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--熱部署工具--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--ribbon依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--Eureka--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> </dependencies>
配置檔案修改埠號
啟動類:
註解@EnableHystrixDashboard開啟監控頁面
@SpringBootApplication
@EnableHystrixDashboard // 開啟監控頁面
public class DeptConsumerDashboard_9001 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumerDashboard_9001.class, args);
}
}
服務提供者匯入依賴:
若提供者能被監控需要匯入依賴
<!--actuator完善監控資訊-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Hystrix依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
服務提供者啟動類:
是在使用Hystrix的服務提供者的啟動類中增加一個servlet配合監控使用,固定寫法
@SpringBootApplication
@MapperScan("com.stt.springcloud.dao")
@EnableEurekaClient
@EnableDiscoveryClient // 服務發現
@EnableCircuitBreaker // 新增對熔斷支援
public class DeptProviderHystrix_8001 {
public static void main(String[] args) {
SpringApplication.run(DeptProviderHystrix_8001.class, args);
}
// 增加一個servlet,固定寫法,配合監控使用
@Bean
public ServletRegistrationBean hystrixMetricsStreamServlet(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
// 新增訪問路徑
registrationBean.addUrlMappings("/actuator/hystrix.stream");
return registrationBean;
}
測試:
若連線不上重啟或等待
瀏覽器服務提供者訪問 /actuator/hystrix.stream檢視連線是否ping通
監控頁面輸入地址http://localhost:8001/actuator/hystrix.stream檢視監控情況
監控頁面: