java B2B2C springmvc mybatis仿淘寶電子商城系統-Hystrix服務容錯

應用場景

需要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼:壹零叄八柒柒肆六二六

分佈式系統中經常會出現某個基礎服務不可用造成整個系統不可用的情況, 這種現象被稱爲服務雪崩效應. 爲了應對服務雪崩, 一種常見的做法是手動服務降級. 而Hystrix的出現,給我們提供了另一種選擇.

Hystrix的內部處理邏輯

構建Hystrix的Command對象, 調用執行方法.

Hystrix檢查當前服務的熔斷器開關是否開啓, 若開啓, 則執行降級服務getFallback方法.

若熔斷器開關關閉, 則Hystrix檢查當前服務的線程池是否能接收新的請求, 若超過線程池已滿, 則執行降級服務getFallback方法.

若線程池接受請求, 則Hystrix開始執行服務調用具體邏輯run方法.

若服務執行失敗, 則執行降級服務getFallback方法, 並將執行結果上報Metrics更新服務健康狀況.

若服務執行超時, 則執行降級服務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;
    }
 
}

java B2B2C springmvc mybatis仿淘寶電子商城系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章