" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud Feign隔離與降級詳細(xì)分析

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

序篇

限流是一種預(yù)防措施,雖然限流可以盡量避免因高并發(fā)而引起的服務(wù)故障,但服務(wù)還會因?yàn)槠渌蚨收稀?/p>

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

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

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

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

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

FeignClient整合Sentinel

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

1.1 修改配置,開啟sentinel功能

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

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

1.2 編寫失敗降級邏輯

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

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

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

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

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

步驟一:在feing-api項(xiàng)目中定義類,實(shí)現(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項(xiàng)目中的DefaultFeignConfiguration類中將UserClientFallbackFactory注冊為一個(gè)Bean:

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

步驟三:在feing-api項(xiàng)目中的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控制臺,可以看到新的簇點(diǎn)鏈路:

1.3 總結(jié)

Sentinel支持的雪崩解決方案:

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

Feign整合Sentinel的步驟:

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

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

相關(guān)文章

  • SpringBoot中選擇性加載Bean的幾種方式小結(jié)

    SpringBoot中選擇性加載Bean的幾種方式小結(jié)

    自動(dòng)配置是springboot技術(shù)非常好用的核心因素,前面學(xué)習(xí)了這么多種技術(shù)的整合,每一個(gè)都離不開自動(dòng)配置,不過在學(xué)習(xí)自動(dòng)配置的時(shí)候,需要你對spring容器如何進(jìn)行bean管理的過程非常熟悉才行,本文給大家介紹了SpringBoot中選擇性加載Bean的幾種方式,需要的朋友可以參考下
    2025-01-01
  • Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目的圖文教程

    Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目的圖文教程

    這篇文章主要介紹了Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java堆&優(yōu)先級隊(duì)列示例講解(上)

    Java堆&優(yōu)先級隊(duì)列示例講解(上)

    這篇文章主要通過示例詳細(xì)為大家介紹Java中的堆以及優(yōu)先級隊(duì)列,文中的示例代碼講解詳細(xì),對我們了解java有一定幫助,需要的可以參考一下
    2022-03-03
  • springboot集成JWT之雙重token的實(shí)現(xiàn)

    springboot集成JWT之雙重token的實(shí)現(xiàn)

    本文主要介紹了springboot集成JWT之雙重token的實(shí)現(xiàn),前端使用accessToken進(jìn)行登錄和驗(yàn)證,后端使用refreshToken定期更新accessToken,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • 快速解決Hash碰撞沖突的方法小結(jié)

    快速解決Hash碰撞沖突的方法小結(jié)

    這篇文章主要介紹了快速解決Hash碰撞沖突的方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • java 快速實(shí)現(xiàn)異步調(diào)用的操作方法

    java 快速實(shí)現(xiàn)異步調(diào)用的操作方法

    這篇文章主要介紹了java 如何快速實(shí)現(xiàn)異步調(diào)用方法,今天我們就來了解下 CompletableFuture,它Java 8引入的一種功能強(qiáng)大的異步編程工具,可以用于實(shí)現(xiàn)復(fù)雜的異步操作和處理鏈?zhǔn)降漠惒饺蝿?wù),需要的朋友可以參考下
    2023-07-07
  • Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程

    Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Spring事務(wù)@Transactional注解四種不生效案例場景分析

    Spring事務(wù)@Transactional注解四種不生效案例場景分析

    這篇文章主要為大家介紹了Spring事務(wù)@Transactional注解四種不生效的案例場景示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • java GUI實(shí)現(xiàn)五子棋游戲

    java GUI實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了java GUI實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • SpringBoot?jwt的token如何刷新

    SpringBoot?jwt的token如何刷新

    這篇文章主要給大家介紹了關(guān)于SpringBoot?jwt的token如何刷新的相關(guān)資料,Json web token(JWT)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn),需要的朋友可以參考下
    2023-07-07

最新評論

连山| 枝江市| 冕宁县| 汝南县| 财经| 上蔡县| 大宁县| 灵石县| 湘乡市| 博湖县| 建阳市| 莒南县| 拉孜县| 勐海县| 鸡东县| 洪泽县| 茶陵县| 广灵县| 南丰县| 六枝特区| 磐石市| 新巴尔虎左旗| 龙里县| 眉山市| 南召县| 镇巴县| 玛多县| 微博| 夏河县| 辽宁省| 米脂县| 新田县| 资中县| 日喀则市| 米泉市| 南丹县| 德保县| 桐乡市| 边坝县| 诸暨市| 青海省|