二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷( 二 )

5.2.3 代碼介紹

二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
5.2.3.1 業務層接口//指定服務名@FeignClient(value = "https://www.huyubaike.com/biancheng/edocmall-server")public interface WebEntryService {//基于feign 遠程調用edoc-server服務端提供的查詢文檔詳情接口@GetMapping("/entry") //必須跟遠程請求一直EdocEntryVO invokeEntryServiceUserFeign(@RequestParam("id") Integer id); //必須寫 @RequestParam("id")// 注意 一點更要寫 @RequestParam("id") 里面的參數必須寫}5.2.3.1 控制層之直接調用接口@RestControllerpublic class WebEntryController {@Autowiredprivate WebEntryService webEntryService;// 根據文檔編號,獲取文檔詳情@GetMapping("/entryById")public RequestResult<EdocEntryVO> entryDetail(Integer id){log.info("------ 根據文檔編號:{},獲取文檔詳情 ------",id);//基于feign 遠程調用服務端接口 , 獲取文檔詳情EdocEntryVO edocEntryVO = webEntryService.invokeEntryServiceUserFeign(id);return ResultBuildUtil.success(edocEntryVO);}}5.2.4 主啟動類上的注解@EnableEurekaClient// 開啟 eureka 服務注冊,將此服務注冊到 eureka中@EnableFeignClients//開啟 feign 遠程調用服務5.2.5 請求測試eureka 注冊中心:
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
feign遠程調用:
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
6、Feign的服務降級與熔斷6.1 服務降級(服務消費端)6.1.1 依賴由于feign中有hystrix的依賴 , 所以不用單獨添加;
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
6.1.2 接口指定服務降級后的實現類@FeignClient(value = "https://www.huyubaike.com/biancheng/edocmall-server",fallback = WebEntryServiceImpl.class) //fallback 指定調用失敗后 降級調用的數據public interface WebEntryService {......}6.1.3 實現類 , 具體降級服務操作@Servicepublic class WebEntryServiceImpl implements WebEntryService {@Overridepublic EdocEntryVO invokeEntryServiceUserFeign(Integer id) {//此方法,就是regn遠程調用,觸發服務剪輯的默認實現,正常請求不會調用//只用遠程 feign調用失敗,才會調用EdocEntryVO edocEntryVO = new EdocEntryVO();edocEntryVO.setId(999);edocEntryVO.setCid(0);edocEntryVO.setTitle("觸發熔斷服務降級");edocEntryVO.setSummary("當feign遠程調用接口失敗,默的默認實現");edocEntryVO.setUploadUser("feign-hystrix");edocEntryVO.setCreateDate(new Date());return edocEntryVO;}6.1.4 測試6.1.4.1 不添加服務降級時
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
6.1.4.2 添加服務降級后
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
6.2 服務熔斷(服務提供端)6.2.1 依賴<!--導入Hystrix依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId></dependency>
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
6.2.2 熔斷 備選方法 和 熔斷觸發條件@Slf4j@RestControllerpublic class EntryController {@Autowiredprivate EntryService entryService;//根據 id 查詢文檔詳情@GetMapping("/entry")@HystrixCommand(fallbackMethod = "fallbackStoryDetail")//指定 服務熔斷后的備選方法public EdocEntryVO entryDetail(@RequestParam Integer id){log.info("------ 根據文檔編號:{},獲取文檔詳情 ------",id);EdocEntryVO edocEntry = entryService.getEdocEntryById(id);if (edocEntry == null){//拋出異常 , 觸發 熔斷 備選方法throw new RuntimeException("id為:"+id+"的用戶不存在,觸發服務熔斷");}return edocEntry;}// 根據 id 查詢文檔詳情 方法 服務熔斷后的備選方案public EdocEntryVO fallbackStoryDetail(@RequestParam Integer id){//此方法,只用服務熔斷時,才會被調用EdocEntryVO edocEntryVO = new EdocEntryVO();edocEntryVO.setId(999);edocEntryVO.setCid(0);edocEntryVO.setTitle("根據 id 查詢文檔詳情 方法 服務熔斷后的備選方案");edocEntryVO.setSummary("當根據id 查詢不到具體用戶信息時,就會觸發");edocEntryVO.setUploadUser("hystrix");edocEntryVO.setCreateDate(new Date());return edocEntryVO;}}6.2.3 主啟動類上的注解@EnableHystrix //開啟熔斷服務 舊的開啟服務熔斷注解: @EnableCircuitBreaker6.2.4 測試6.2.4.1 沒有服務降級,也沒有服務熔斷 時直接返回錯誤;
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

文章插圖
6.2.4.2 有服務降級,沒有服務熔斷 時觸發服務降級;
二 SpringCloud - Eureka注冊中心,feign遠程調用,hystrix降級和熔斷

推薦閱讀