應用場景html
須要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼:壹零叄八柒柒肆六二六java
分佈式系統中常常會出現某個基礎服務不可用形成整個系統不可用的狀況, 這種現象被稱爲服務雪崩效應. 爲了應對服務雪崩, 一種常見的作法是手動服務降級. 而Hystrix的出現,給咱們提供了另外一種選擇.spring
Hystrix的內部處理邏輯bash
構建Hystrix的Command對象, 調用執行方法.mybatis
Hystrix檢查當前服務的熔斷器開關是否開啓, 若開啓, 則執行降級服務getFallback方法.mvc
若熔斷器開關關閉, 則Hystrix檢查當前服務的線程池是否能接收新的請求, 若超過線程池已滿, 則執行降級服務getFallback方法.負載均衡
若線程池接受請求, 則Hystrix開始執行服務調用具體邏輯run方法.分佈式
若服務執行失敗, 則執行降級服務getFallback方法, 並將執行結果上報Metrics更新服務健康情況.ide
若服務執行超時, 則執行降級服務getFallback方法, 並將執行結果上報Metrics更新服務健康情況.微服務
若服務執行成功, 返回正常結果.
若服務降級方法getFallback執行成功, 則返回降級結果.
若服務降級方法getFallback執行失敗, 則拋出異常.
很少說先配置執行一波
Maven
<!--斷路由,服務容錯保護-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
Java Code
public class BaseService {
@Autowired
protected RestTemplate restTemplate;
protected static String SERVICE_BIZ = "http://service-biz";
@Bean
@LoadBalanced
//開啓負載均衡
RestTemplate restTemplate() {
return new RestTemplate();
}
}
/**
* Created by gaomin on 2017/12/24.
*/
@Service
public class RestTemplateServiceImp extends BaseService implements RestTemplateService {
@Override
@HystrixCommand(fallbackMethod = "getBizSerivceDataErrorBack")
public Object getBizSerivceData() {
String url = SERVICE_BIZ+"/index/findUserMenuList";
Map<String,Object> uriVariables = new HashMap<>();
return restTemplate.getForObject(url,Object.class);
}
/**
* getBizSerivceDataErrorBack 和 getBizSerivceData 參數要同樣返回類型也要同樣
* 服務降級 SERVICE_BIZ服務掛了,自動走這個方法.適用於全部第三方
* 調用別的服務時,若是別的服務未響應,會致使本服務請求阻塞,這個能夠解決斷路由保護
* 直接返回error,默認請求時間2000毫秒
* @return
*/
public Object getBizSerivceDataErrorBack(){
//能夠從新請求,還能夠繼續降級 ....
return null;
}
}
複製代碼