" />

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

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

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

序篇

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

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

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

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

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

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

FeignClient整合Sentinel

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

1.1 修改配置,開(kāi)啟sentinel功能

修改OrderService的application.yml文件,開(kāi)啟Feign的Sentinel功能:

feign:
  sentinel:
    enabled: true # 開(kāi)啟feign對(duì)sentinel的支持

1.2 編寫(xiě)失敗降級(jí)邏輯

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

給FeignClient編寫(xiě)失敗后的降級(jí)邏輯

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

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

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

步驟一:在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注冊(cè)為一個(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);
}

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

1.3 總結(jié)

Sentinel支持的雪崩解決方案:

  • 線程隔離(倉(cāng)壁模式)
  • 降級(jí)熔斷

Feign整合Sentinel的步驟:

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

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

相關(guān)文章

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

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

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

    ElasticSearch查詢文檔基本操作實(shí)例

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

    XML操作類庫(kù)XStream使用詳解

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

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

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

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

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

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

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

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

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

    intellij IDEA配置springboot的圖文教程

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

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

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

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

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

最新評(píng)論