Feign默認是整合了Ribbon和Hystrix這兩個框架,因此代碼咱們在上一篇的基礎上進行修改,啓動Eureka,service-hello,Feignhtml
所謂的熔斷機制和平常生活中見到電路保險絲是很是類似的,當出現了問題以後,保險絲會自動燒斷,以保護咱們的電器, 那麼若是換到了程序之中呢?java
當如今服務的提供方出現了問題以後整個的程序將出現錯誤的信息顯示,而這個時候若是不想出現這樣的錯誤信息,而但願替換爲一個錯誤時的內容。git
一個服務掛了後續的服務跟着不能用了,這就是雪崩效應github
對於熔斷技術的實現須要考慮如下幾種狀況:web
· 出現錯誤以後能夠 fallback 錯誤的處理信息;spring
· 若是要結合 Feign 一塊兒使用的時候還須要在 Feign(客戶端)進行熔斷的配置。springboot
@EnableCircuitBreaker // 開啓Hystrix容錯 @EnableDiscoveryClient @EnableFeignClients //開啓Feign的功能: @SpringBootApplication public class SpringCloundEurekaFeginExampleApplication { public static void main(String[] args) { SpringApplication.run(SpringCloundEurekaFeginExampleApplication.class, args); } }
feign.hystrix.enabled=true
添加FeignServiceFallbackapp
@Component public class FeignServiceFallback implements IFeginService { @Override public String index() { return "錯誤了是嗎???"; } }
修改IFeignService框架
//表明改接口用費"service-hello"的服務 提供 @FeignClient(value = "service-hello", fallback = FeignServiceFallback.class) public interface IFeginService { @RequestMapping(value = "/index") public String index(); }
這個僅僅是在@FeignClient
註解中增長了fallback
的配置,並設置其值爲咱們剛剛新建的類:FeignServiceFallback。ide
接下來停掉SERVICE-HELLO或者在服務方法直接拋錯
能夠看到FallBack已經啓做用,當所有SERVICE-HELLO不起做用時,SERVICE-FEIGN中的FeignServiceFallback進入了回退處理。
其實Hystrix提供了兩個對象來支持回退處理:HystrixCommand
和HystrixObservableCommand
,其中後者是用在依賴的服務返回多個操做結果的時候,這裏咱們只演示一下HystrixCommand
的使用,對於後者可自行嘗試,或者查看官方文檔
添加pom:spring-cloud-starter-netflix-hystrix
@Service
public class HelloServiceImpl implements IHelloService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "serviceFallback")
@Override
public String index() {
return restTemplate.getForObject("http://SERVICE-HELLO-2/index", String.class);
}
public String serviceFallback() {
return "錯誤了嗎?";
}
}
spring-cloud-starter-hystrix(spring-cloud-starter-netflix-hystrix
)
spring-boot-starter-actuator
,可以讓
/hystrix-stream
端點能夠獲取到Hystrix的監控數據。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
springboot2的查看/actuator 是沒辦法查看全部監控接口的,須要在application.properties添加
management.endpoints.web.exposure.include=*
能夠看到頁面會重複輸出一些統計數據(注: 你要先嚐試訪問一下所提供的服務纔會有這些數據輸出)。至於這些數據究竟是什麼我在這裏就不一一解析了,幸虧Hystrix還爲咱們提供了一個可視化界面來查看這些數據。
添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
入口文件添加 @EnableHystrixDashboard 註解
打開http://localhost:8886/hystrix,能夠看到以下界面:
說明Dashboard已經啓動成功。而後在界面中輸入以前的地址: http://localhost:8886/actuator/hystrix.stream,而後點擊[Monitor Stream]就能夠看到統計報表頁面: