Netflix的創造了一個調用的庫Hystrix實現了斷路器圖案。在微服務架構中,通常有多層服務調用。較低級別的服務中的服務故障可能導致用戶級聯故障。當對特定服務的呼叫達到一定閾值時(Hystrix中的默認值爲5秒內的20次故障),電路打開,不進行通話。在錯誤和開路的情況下,開發人員可以提供後備。開放式電路會停止級聯故障,並允許不必要的或失敗的服務時間來癒合。回退可以是另一個Hystrix保護的調用,靜態數據或一個正常的空值。回退可能被鏈接,所以第一個回退使得一些其他業務電話又回到靜態數據。
以上是Spring Cloud 對斷路器Hystrix客戶端的描述。官方文檔的圖片
對sevice-ribbon工程進行改造,pom文件添加依賴:
<!--spring-cloud-starter-hystrix的起步依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
在啓動類上加註解;
@EnableHystrix
@EnableHystrixDashboard
調用服務的地方加上註解:
@HystrixCommand(fallbackMethod = “hiServiceError”) hiServiceError是調用遠程服務出錯的時候回調的方法。HelloService 添加方法:
public String hiServiceError(String name){
return name+“調用hiService失敗”;
}
啓動服務註冊中心,啓動service-ribbon,瀏覽器訪問localhost:8761
可以看到只有一個消費者註冊到註冊中心。瀏覽器訪問http://localhost:8764/hi?name=mms
能調用到遠程服務。
斷路器:Hystrix儀表板
Hystrix的主要優點之一是它收集關於每個HystrixCommand的一套指標。Hystrix儀表板以有效的方式顯示每個斷路器的運行狀況。
前面已經將在pom添加了儀表板的起步依賴,也在啓動類添加了相應的註解。瀏覽器訪問http://localhost:8764/hystrix
在輸入框輸入http://localhost:8764/hystrix.stream,Tiitle輸入任意字符,點擊Montor Stream
可以看到hiService的是健康狀態。
在Feign中使用斷路由器:
同樣在pom文件中添加添加依賴,application配置文件中添加配置feign.hystrix.enabled= true,在啓動類上添加註解,@EnableHystrixDashboard,@EnableCircuitBreaker新建SayHiServiceFallBack實現SayHiService,重新sayHi方法,使用Spring注入。
/**
- @author heyaunjun
- @date 2017-11-6 11:02
*/
@Component
public class SayHiServiceFallBack implements SayHiService {
@Override
public String sayHi(String name) {
return name+“feign調用服務失敗”;
}
}
SayHiService接口添加註解@FeignClient(value = “service-hi”,fallback = SayHiServiceFallBack.class).
驗證方法和ribbon的驗證方式一樣。
未解決的問題:feign在使用斷路由器的儀表版時,訪問http://localhost:8764/hystrix會下載一個hystrix文件,文件大小時0kb。也無法看到服務的健康狀態。
各種IT書籍書目及下載鏈接
https://blog.csdn.net/dh1027/article/details/89327978