(四)Hystrix容錯保護

Feign默認是整合了Ribbon和Hystrix這兩個框架,因此代碼咱們在上一篇的基礎上進行修改,啓動Eureka,service-hello,Feignhtml

 

 

所謂的熔斷機制和平常生活中見到電路保險絲是很是類似的,當出現了問題以後,保險絲會自動燒斷,以保護咱們的電器, 那麼若是換到了程序之中呢?java

當如今服務的提供方出現了問題以後整個的程序將出現錯誤的信息顯示,而這個時候若是不想出現這樣的錯誤信息,而但願替換爲一個錯誤時的內容。git

一個服務掛了後續的服務跟着不能用了,這就是雪崩效應github

 對於熔斷技術的實現須要考慮如下幾種狀況:web

 · 出現錯誤以後能夠 fallback 錯誤的處理信息;spring

 · 若是要結合 Feign 一塊兒使用的時候還須要在 Feign(客戶端)進行熔斷的配置。springboot

 

在上文的feign項目中,修改啓動類

@EnableCircuitBreaker	// 開啓Hystrix容錯
@EnableDiscoveryClient
@EnableFeignClients      //開啓Feign的功能:
@SpringBootApplication
public class SpringCloundEurekaFeginExampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloundEurekaFeginExampleApplication.class, args);
	}
}

  

properties文件添加配置,打開hystrix

feign.hystrix.enabled=true

  

實現IFeignService的FallBack

添加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進入了回退處理。

 

在不使用Feign時如何使用Hystrix

其實Hystrix提供了兩個對象來支持回退處理:HystrixCommandHystrixObservableCommand,其中後者是用在依賴的服務返回多個操做結果的時候,這裏咱們只演示一下HystrixCommand的使用,對於後者可自行嘗試,或者查看官方文檔

基於Ribbon

添加pom:spring-cloud-starter-netflix-hystrix

啓動類開啓:@EnableCircuitBreaker

@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 "錯誤了嗎?";
}
}

 

 

Hystrix監控

Hystrix除了實現服務容錯以外,還提供了對服務請求的監控:每秒執行的請求數、成功數等。開啓Hystrix的監控很是簡單,
一個是添加 spring-cloud-starter-hystrix(spring-cloud-starter-netflix-hystrix
二是添加 spring-boot-starter-actuator,可以讓 /hystrix-stream端點能夠獲取到Hystrix的監控數據。
針對 上文的feign項目
        <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還爲咱們提供了一個可視化界面來查看這些數據。

Hystrix Dashboard

添加依賴

        <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]就能夠看到統計報表頁面:

相關文章
相關標籤/搜索