Hystrix簡述
Netflix
開源了Hystrix
組件,實現了斷路器
模式,SpringCloud
對這一組件進行了整合。在微服務架構中荚孵,一個請求需要調用多個服務是非常常見的。
- 雪崩效應
多個微服務之間進行復雜的通信時纬朝,如果有一個服務出現問題收叶,就會引發(fā)雪崩效應,導致整個系統(tǒng)癱瘓共苛。Spring Cloud Hystrix
提供了一個類似于保險絲的作用判没,當服務不可用的時候,Hystrix
打開斷路器俄讹,不再進行服務通信,從而保證自身服務的可用性绕德。 - 服務降級
服務降級就是在系統(tǒng)高并發(fā)的情況下患膛,可以將一些邊緣服務進行降級(服務暫停),將資源優(yōu)先供給核心服務的處理耻蛇。
構建項目
因為熔斷只是作用在消費方(服務調用方)這一端踪蹬,因此我們根據SpringCloud組件:創(chuàng)建你的第一個Feign客戶端文章,改動tairan-spring-cloud-feign-api
和tairan-spring-cloud-feign-consumer
兩個項目少量代碼即可臣咖。
因為Feign
中已經依賴了Hystrix
跃捣,所以在Maven
配置上不用做任何改動。
關于單獨引入
Hystrix
依賴夺蛇,網上有的文章說引入的依賴是spring-cloud-starter-hystrix
疚漆,其實官方不在推薦使用,推薦使用spring-cloud-starter-netflix-hystrix
。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
tairan-spring-cloud-feign-api修改
1. 創(chuàng)建HelloServiceHystrix
類
創(chuàng)建HelloServiceHystrix
類娶聘,并實現HelloService
接口闻镶,代碼如下:
package com.tairan.chapter.feign.api.hystrix;
import com.tairan.chapter.feign.api.HelloService;
import org.springframework.stereotype.Component;
/**
* 當HelloService中的Feign調用失敗或超時時,會調用該實現類的方法
* 需要注意的是fallback指定的類一定要添加@Component將其加入到Spring容器
*/
@Component
public class HelloServiceHystrix implements HelloService {
@Override
public String getMessage() throws Exception {
return "Get Message Failed!";
}
}
注意:
fallback
指定的類一定要添加@Component
將其加入到Spring
容器
2. 修改HelloService
接口
修改HelloService
接口丸升,在FeignClient
注解中添加fallback
铆农,指定Hystrix
熔斷異常回調類HelloServiceHystrix
狡耻,代碼如下:
package com.tairan.chapter.feign.api;
import com.tairan.chapter.feign.api.hystrix.HelloServiceHystrix;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(value = "tairan-spring-cloud-feign-provider", fallback = HelloServiceHystrix.class)
public interface HelloService {
@RequestMapping("/hello")
String getMessage() throws Exception;
}
tairan-spring-cloud-feign-consumer修改
- 開啟
Feign
對Hystrix
的支持墩剖,在application.yml
文件中添加如下配置:
feign:
# Dalston SR1(待定)之后的版本默認關閉hystrix對feign的支持,如果想要使用fallback功能這里必須啟用
hystrix:
enabled: true
- 入口類修改
SpringBootApplication
掃描路徑夷狰,可以掃描到Hystrix
熔斷類岭皂,即tairan-spring-cloud-feign-api
中的HelloServiceHystrix
類,代碼如下所示:
@SpringBootApplication(scanBasePackages = "com.tairan.chapter.feign")
@EnableDiscoveryClient
// 通過@EnableFeignClients注解開啟Spring Cloud Feign的支待功能孵淘。
@EnableFeignClients("com.tairan.chapter.feign.api")
public class TairanSpringCloudFeignConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(TairanSpringCloudFeignConsumerApplication.class, args);
}
}
運行測試
- 啟動服務注冊中心
tairan-spring-cloud-eureka
- 啟動服務提供方
tairan-spring-cloud-feign-provider
- 啟動服務消費方
tairan-spring-cloud-feign-consumer
- 訪問
tairan-spring-cloud-feign-consumer
工程的/feign-hello
接口蒲障,鏈接:http://localhost:8080/feign-hello,查看訪問結果- 關閉服務提供方
tairan-spring-cloud-feign-provider
- 訪問
tairan-spring-cloud-feign-consumer
工程的/feign-hello
接口瘫证,鏈接:http://localhost:8080/feign-hello揉阎,查看訪問結果
執(zhí)行4操作后,訪問鏈接http://localhost:8080/feign-hello后背捌,接口返回結果如下所示:
執(zhí)行5操作后毙籽,訪問鏈接http://localhost:8080/feign-hello后,接口返回結果如下所示:
根據返回結果說明熔斷成功毡庆。
源碼位置
本章源碼已經上傳到淡若悠然
坑赡,請結合源碼進行學習,感謝閱讀么抗。