" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud Feign隔離與降級詳細分析

 更新時間:2022年11月04日 09:42:12   作者:借東西的小人兒  
Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端; Ribbon負載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似

序篇

限流是一種預(yù)防措施,雖然限流可以盡量避免因高并發(fā)而引起的服務(wù)故障,但服務(wù)還會因為其它原因而故障。

而要將這些故障控制在一定范圍,避免雪崩,就要靠線程隔離(艙壁模式)和熔斷降級手段了。

線程隔離:調(diào)用者在調(diào)用服務(wù)提供者時,給每個調(diào)用的請求分配獨立線程池,出現(xiàn)故障時,最多消耗這個線程池內(nèi)資源,避免把調(diào)用者的所有資源耗盡。

熔斷降級:是在調(diào)用方這邊加入斷路器,統(tǒng)計對服務(wù)提供者的調(diào)用,如果調(diào)用的失敗比例過高,則熔斷該業(yè)務(wù),不允許訪問該服務(wù)的提供者了。

可以看到,不管是線程隔離還是熔斷降級,都是對客戶端(調(diào)用方)的保護。需要在調(diào)用方 發(fā)起遠程調(diào)用時做線程隔離、或者服務(wù)熔斷。

而我們的微服務(wù)遠程調(diào)用都是基于Feign來完成的,因此我們需要將Feign與Sentinel整合,在Feign里面實現(xiàn)線程隔離和服務(wù)熔斷。

FeignClient整合Sentinel

SpringCloud中,微服務(wù)調(diào)用都是通過Feign來實現(xiàn)的,因此做客戶端保護必須整合Feign和Sentinel。

1.1 修改配置,開啟sentinel功能

修改OrderService的application.yml文件,開啟Feign的Sentinel功能:

feign:
  sentinel:
    enabled: true # 開啟feign對sentinel的支持

1.2 編寫失敗降級邏輯

業(yè)務(wù)失敗后,不能直接報錯,而應(yīng)該返回用戶一個友好提示或者默認結(jié)果,這個就是失敗降級邏輯。

給FeignClient編寫失敗后的降級邏輯

①方式一:FallbackClass,無法對遠程調(diào)用的異常做處理

②方式二:FallbackFactory,可以對遠程調(diào)用的異常做處理,我們選擇這種

這里我們演示方式二的失敗降級處理。

步驟一:在feing-api項目中定義類,實現(xiàn)FallbackFactory:

代碼:

import cn.itcast.feign.clients.UserClient;
import cn.itcast.feign.pojo.User;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UserClientFallbackFactory implements FallbackFactory<UserClient> {
    @Override
    public UserClient create(Throwable throwable) {
        return new UserClient() {
            @Override
            public User findById(Long id) {
                log.error("查詢用戶異常", throwable);
                return new User();
            }
        };
    }
}

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

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

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

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(value = "userservice", fallbackFactory = UserClientFallbackFactory.class)
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

重啟后,訪問一次訂單查詢業(yè)務(wù),然后查看sentinel控制臺,可以看到新的簇點鏈路:

1.3 總結(jié)

Sentinel支持的雪崩解決方案:

  • 線程隔離(倉壁模式)
  • 降級熔斷

Feign整合Sentinel的步驟:

  • 在application.yml中配置:feign.sentienl.enable=true
  • 給FeignClient編寫FallbackFactory并注冊為Bean
  • 將FallbackFactory配置到FeignClient

到此這篇關(guān)于SpringCloud Feign隔離與降級詳細分析的文章就介紹到這了,更多相關(guān)SpringCloud Feign隔離與降級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    java實現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    這篇文章主要介紹了java實現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • ElasticSearch查詢文檔基本操作實例

    ElasticSearch查詢文檔基本操作實例

    這篇文章主要為大家介紹了ElasticSearch查詢文檔基本操作實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • XML操作類庫XStream使用詳解

    XML操作類庫XStream使用詳解

    這篇文章主要給大家介紹了關(guān)于XML操作類庫XStream使用的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • java垃圾回收之實現(xiàn)并行GC算法

    java垃圾回收之實現(xiàn)并行GC算法

    這篇文章主要為大家介紹了java垃圾回收之實現(xiàn)并行GC算法的詳細講解,讓我們看看并行垃圾收集器的GC日志長什么樣,?從中我們可以得到哪些有用信息
    2022-01-01
  • java中struts2實現(xiàn)簡單的文件上傳與下載

    java中struts2實現(xiàn)簡單的文件上傳與下載

    這篇文章主要為大家詳細介紹了java中struts2實現(xiàn)簡單的文件上傳與下載的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java定時任務(wù)的三種實現(xiàn)方式

    Java定時任務(wù)的三種實現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于Java定時任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Spring Boot(五)之跨域、自定義查詢及分頁

    Spring Boot(五)之跨域、自定義查詢及分頁

    這篇文章主要介紹了Spring Boot(五)之跨域、自定義查詢及分頁的的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • intellij IDEA配置springboot的圖文教程

    intellij IDEA配置springboot的圖文教程

    Spring Boot是由Pivotal團隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。接下來通過本文給大家介紹intellij IDEA配置springboot的圖文教程,感興趣的朋友一起看看吧
    2018-03-03
  • IntelliJ IDEA配置Tomcat(完整版圖文教程)

    IntelliJ IDEA配置Tomcat(完整版圖文教程)

    這篇文章主要介紹了IntelliJ IDEA配置Tomcat(完整版圖文教程),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • java如何消除太多的if else判斷示例代碼

    java如何消除太多的if else判斷示例代碼

    這篇文章主要介紹了java如何消除太多的if else判斷,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05

最新評論