Sentinel隔離和降級-Feign整合Sentinel


雖然限流可以盡量避免因高並發而引起的服務故障,但服務還會因為其它原因而故障。而要將這些故障控制在一定范圍,避免雪崩,就要靠線程隔離(艙壁模式)和熔斷降級手段了。

不管是線程隔離還是熔斷降級,都是對客戶端(調用方)的保護。

Feign整合Sentinel
SpringCloud中,微服務調用都是通過Feign來實現的,因此做客戶端保護必須整合Feign和Sentinel。
1.修改OrderService的application.yml文件,開啟Feign的Sentinel功能
# 開啟feign對sentinel的支持

feign: sentinel: enabled: true 

 

2.給FeignClient編寫失敗后的降級邏輯
方式一:FallbackClass,無法對遠程調用的異常做處理
方式二:FallbackFactory,可以對遠程調用的異常做處理,我們選擇這種

步驟一:在feing-api項目中定義類,實現FallbackFactory:

@Slf4j public class UserClientFallbackFactory implements FallbackFactory<UserClient> { @Override public UserClient create(Throwable throwable) { // 創建UserClient接口實現類,實現其中的方法,編寫失敗降級的處理邏輯
        return new UserClient() { @Override public User findById(Long id) { // 記錄異常信息
                log.error("查詢用戶異常", throwable); // 根據業務需求返回默認的數據,這里是空用戶
                return new User(); } }; } }

 

步驟二:在feing-api項目中的DefaultFeignConfiguration類中將UserClientFallbackFactory注冊為一個Bean:

public class DefaultFeignConfiguration { @Bean public UserClientFallbackFactory userClientFallbackFactory(){ return new UserClientFallbackFactory(); } }

 

步驟三:在feing-api項目中的UserClient接口中使用UserClientFallbackFactory:

@FeignClient(value = "userservice", fallbackFactory = UserClientFallbackFactory.class) public interface UserClient { @GetMapping("/user/{id}") User findById(@PathVariable("id") Long id); }

 

總結
Sentinel支持的雪崩解決方案:
線程隔離(倉壁模式)
降級熔斷


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM