您好,登錄后才能下訂單哦!
這篇文章的知識點包括:雪崩效應的介紹、Hystrix實現容錯,閱讀完整文相信大家對springCloud使用Hystrix實現容錯的方法有了一定的認識。
一、雪崩效應
如上圖可見,A服務作為基礎服務,當他掛掉之后,導致級聯故障,BCD都掛掉,導致雪崩效應。
二、如何容錯
方法一:設置超時
通常情況下一次遠程連接就對應這一個線程或者進程,如果響應太慢,這個線程或者進程得不到釋放,資源就會逐漸消耗導致服務不可用。此時設置超時,讓資源盡快釋放。
方法二:使用斷路器模式
在設置超時的情況下,如果對某個服務已經不可用時,所有新的請求都需要等待設置的超時時間,但此時這些等待時間已經毫無意義。
斷路器應該事先快速失敗,如果在一段時間檢測到許多類似的錯誤,就會對該服務快速失敗,停止請求已停掉的服務。斷路器也應該可以自動診斷依賴的服務是否已經恢復正常。
斷路器邏輯:
1、正常情況下,斷路器關閉,可正常訪問;
2、在一段時間內請求失敗率達到閾值,斷路器打開;
3、打開后進入“半開”狀態。此時可允許一個請求訪問依賴的服務,若成功則關閉斷路器,若失敗則繼續保持打開狀態。
三、使用Hystrix實現容錯
Hystrix:是由Netflix開源的一個延遲和容錯庫,用于隔離訪問遠程系統、服務或者第三方庫,防止級聯失敗。
實現方式:
包裹請求
跳閘機制:當服務錯誤率達到一定閾值時,自動跳閘或者手動跳閘
資源隔離:Hystrix為每個依賴都維護了一個小型的線程池,當線程池已滿,會立即拒絕該依賴的請求,加速失敗判定。
監控
回退機制:發生錯誤時,執行回退機制,類似缺省值;
自我修復:斷路器打開后的自動恢復機制
整合Hystrix
1、為movie添加依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.4.3.RELEASE</version> </dependency>
2、在啟動類上加上如下注解:
@EnableHystrix
3、修改controller:
@RequestMapping(value = "/movie/findById", method = RequestMethod.GET) @HystrixCommand(fallbackMethod = "findByIdFallback") public Map findById(Integer userId) { log.info("/movie/findById被訪問,參數:userId=" + userId); //使用端口調用 /*ResponseEntity<HashMap> forEntity = this.restTemplate.getForEntity(findByUserIdUrl + userId, HashMap.class);*/ //使用Eureka+ribbon return this.restTemplate.getForObject("http://user/user/getUserInfo?userId=" + userId, HashMap.class); } public Map<String, String> findByIdFallback(Integer userId){ Map<String, String> user = new HashMap<>(3); user.put("name","默認用戶"); user.put("id","-1"); user.put("age","18"); return user; }
啟動注冊中心和【movie】服務,不啟動【user】,訪問 /movie/findById?userId=1
響應為缺省值。
看完這篇文章,你們學會springCloud使用Hystrix實現容錯的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。