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

Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解

 更新時(shí)間:2023年01月04日 08:41:54   作者:Lxlxxx  
這篇文章主要為大家介紹了Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

前面說(shuō)到在我們應(yīng)對(duì)高并發(fā)的場(chǎng)景,請(qǐng)求量過(guò)于大的情況下給我們服務(wù)器的壓力很多,造成緩存穿透、擊穿、雪崩,那么我們采用布隆過(guò)濾器,有興趣的小伙伴可以去看看上篇文章,關(guān)于布隆過(guò)濾器的解析。Redis處理高并發(fā)之布隆過(guò)濾器

我們要從根源上解決問(wèn)題,比如一個(gè)接口在同一時(shí)間內(nèi)被多次請(qǐng)求,如果請(qǐng)求失敗了,我們還要繼續(xù)請(qǐng)求么,一直請(qǐng)求一直失敗,一直的在給我們的服務(wù)器施加壓力,這種情況下肯定是不行,這個(gè)時(shí)候我們就需要對(duì)接口服務(wù)提供降級(jí)策略,在服務(wù)請(qǐng)求達(dá)成一定失敗率的情況下,就觸發(fā)降級(jí)、熔斷策略對(duì)服務(wù)進(jìn)行保護(hù),也可以去服務(wù)的每分鐘請(qǐng)求次數(shù)做限制,從而保護(hù)我們的服務(wù),給服務(wù)端減輕壓力,可以更加效率去執(zhí)行業(yè)務(wù)邏輯。

Hystrix簡(jiǎn)介

Hystrix 是一個(gè)用于解決分布式服務(wù)調(diào)用出現(xiàn)延遲、故障,在一個(gè)服務(wù)出現(xiàn)故障的時(shí)候,保護(hù)其他服務(wù)可以正常使用,避免整個(gè)系統(tǒng)出現(xiàn)問(wèn)題,Hystrix作為開(kāi)源庫(kù),以斷路器的角色存在著。

Hystrix的使用

服務(wù)降級(jí)

服務(wù)超時(shí)或故障,Hystrix調(diào)用降級(jí)方法處理,首先構(gòu)建兩個(gè)服務(wù),一個(gè)system服務(wù),定義2個(gè)controller方法,一個(gè)是模擬超時(shí)的場(chǎng)景,一個(gè)模擬調(diào)用錯(cuò)誤的場(chǎng)景,另外一個(gè)system2的服務(wù),去模擬分布式場(chǎng)景下的調(diào)system服務(wù)的場(chǎng)景。

system服務(wù)控制層

@RestController
@RequestMapping("/hystrix")
@DefaultProperties(defaultFallback = "timeOutFallbackMethod")
public class HystrixController {
    @Autowired
    private IHystrixService iHystrixService;
    @GetMapping("/error")
    @HystrixCommand
    public String errorMethod() {
        int i = 10 / 0;
        return iHystrixService.fallBackMethodOk();
    }
    @GetMapping("/timeOut")
    @HystrixCommand(fallbackMethod = "timeOutFallbackMethod", commandProperties = {
            //超過(guò)2秒及服務(wù)降級(jí)
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
    })
    public String timeOutMethod() throws InterruptedException {
        //線程睡眠3秒
        return iHystrixService.timeOutMethod();
    }
    /**
     * 降級(jí)方法
     *
     * @return
     */
    private String timeOutFallbackMethod() {
        return "服務(wù)訪問(wèn)失敗,降級(jí)處理";
    }
}

@DefaultProperties 默認(rèn)全局降級(jí)方法,在單純只加@HystrixCommand注解的情況下,走默認(rèn)的defaultFallback方法。

int i = 10 / 0; 接口異常情況下降級(jí)

超時(shí)降級(jí),服務(wù)設(shè)置超時(shí)時(shí)間為2秒,調(diào)用線程睡眠3秒,超時(shí)調(diào)降級(jí)服務(wù)

System2調(diào)System降級(jí)場(chǎng)景

controller

@RestController
@AllArgsConstructor
@RequestMapping("/provider")
public class HystrixProviderController {
    @Autowired
    private HystrixService hystrixService;
    /**
     * 模擬接口錯(cuò)誤場(chǎng)景
     * @return
     */
    @GetMapping("/executeProviderMethod1")
    public String executeProviderMethod1(){
        int i =5/0;
        String result = hystrixService.errorMethod();
        return result;
    }
}

服務(wù)system feign接口,feign添加fallback,實(shí)現(xiàn)類(lèi)是調(diào)用的降級(jí)方法。

@FeignClient(contextId = "hystrixService", value = "Lxlxxx-system", fallbackFactory = HystrixFallbackFactory.class)
public interface HystrixService {
    /**
     * 異常方法
     *
     * @return
     */
    @GetMapping("/hystrix/error")
    public String errorMethod();
    /**
     * 超時(shí)方法
     *
     * @return
     */
    @GetMapping("/hystrix/timeOut")
    public String timeOutMethod();
}

fallback降級(jí)方法。

@Component
@Slf4j
public class HystrixFallbackFactory implements FallbackFactory<HystrixService> {
    @Override
    public HystrixService create(Throwable cause) {
        log.error("用戶服務(wù)調(diào)用失敗:{}", cause.getMessage());
        return new HystrixService() {
            @Override
            public String errorMethod() {
                return "觸發(fā)system 服務(wù)的降級(jí)方法";
            }
            @Override
            public String timeOutMethod() {
                return null;
            }
        };
    }
}

服務(wù)熔斷

Service類(lèi)里面的熔斷方式,可以配置多個(gè)出發(fā)服務(wù)熔斷的屬性,從而更好的斷路保護(hù)服務(wù)。

@Service
@Slf4j
public class HystrixServiceImpl implements IHystrixService {
    //服務(wù)熔斷
    @HystrixCommand(fallbackMethod = "fallback",commandProperties = {
            @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),  //是否開(kāi)啟斷路器
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "5"),   //請(qǐng)求次數(shù)
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),  //時(shí)間范圍
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), //失敗率達(dá)到多少后跳閘
    })
    @Override
    public String countError(Integer count){
        //模擬報(bào)錯(cuò)
        if (count > 0){
            throw new RuntimeException("*****count 必須大于0");
        }
        return Thread.currentThread().getName()+"\t"+"調(diào)用成功";
    }
    public String fallback(Integer count){
        return "count 必修大于0    count: " +count;
    }
}

總結(jié)

熔斷、降級(jí)的方式有很多,Spring Cloud Hystrix 可以能更好的集成在分布式微服務(wù)的架構(gòu)體系上,采用注解的方式,更加方便使用,如果還有更好的服務(wù)熔斷、降級(jí)策略歡迎小伙伴分享。

以上就是Spring Cloud Hystrix 服務(wù)降級(jí)限流策略詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring Cloud Hystrix 服務(wù)降級(jí)限流的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java解決線程安全的兩種方式分享

    Java解決線程安全的兩種方式分享

    這篇文章主要為大家詳細(xì)介紹了Java中兩種常用的解決線程安全的方式——Synchornized和Lock,文中的示例代碼簡(jiǎn)潔易懂,快跟隨小編一起學(xué)習(xí)起來(lái)吧
    2023-06-06
  • JAVA偏向鎖的原理與實(shí)戰(zhàn)

    JAVA偏向鎖的原理與實(shí)戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了JAVA偏向鎖的原理與實(shí)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Linux下JDK安裝教程

    Linux下JDK安裝教程

    這篇文章主要為大家詳細(xì)介紹了Linux下JDK安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring注解Autowired的底層實(shí)現(xiàn)原理詳解

    Spring注解Autowired的底層實(shí)現(xiàn)原理詳解

    從當(dāng)前springboot的火熱程度來(lái)看,java?config的應(yīng)用是越來(lái)越廣泛了,在使用java?config的過(guò)程當(dāng)中,我們不可避免的會(huì)有各種各樣的注解打交道,其中,我們使用最多的注解應(yīng)該就是@Autowired注解了。本文就來(lái)聊聊Autowired的底層實(shí)現(xiàn)原理
    2022-10-10
  • MyBatis-Plus?updateById更新不了空字符串或null的解決方法

    MyBatis-Plus?updateById更新不了空字符串或null的解決方法

    本文主要介紹了MyBatis-Plus?updateById更新不了空字符串或null的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Spring FreeMarker整合Struts2過(guò)程詳解

    Spring FreeMarker整合Struts2過(guò)程詳解

    這篇文章主要介紹了Spring FreeMarker整合Struts2過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Spring與Mybatis的整合方法有哪些

    Spring與Mybatis的整合方法有哪些

    本文主要給大家介紹Spring與Mybatis的三種常用整合方法,需要用到的整合框架包mybatis-spring.jar,對(duì)spring mybatis整合感興趣的朋友可以參考下本文
    2015-10-10
  • java之構(gòu)造器的重載問(wèn)題

    java之構(gòu)造器的重載問(wèn)題

    這篇文章主要介紹了java之構(gòu)造器的重載問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Spring實(shí)現(xiàn)對(duì)象注入的三種方法詳解

    Spring實(shí)現(xiàn)對(duì)象注入的三種方法詳解

    這篇文章主要為大家學(xué)習(xí)介紹了Spring中實(shí)現(xiàn)對(duì)象注入的三種常用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2023-07-07
  • java調(diào)用webservice的.asmx接口的使用步驟

    java調(diào)用webservice的.asmx接口的使用步驟

    這篇文章主要介紹了java調(diào)用webservice的.asmx接口的使用步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

太白县| 西盟| 武义县| 黔西县| 桦川县| 沁阳市| 会泽县| 姚安县| 资中县| 玉山县| 朝阳市| 巫溪县| 丁青县| 惠来县| 泽库县| 长顺县| 鄄城县| 长岛县| 台湾省| 临夏县| 余姚市| 桂平市| 汕尾市| 镇原县| 莱阳市| 定日县| 甘孜| 察雅县| 舟山市| 忻城县| 海兴县| 静宁县| 宝山区| 江口县| 乌鲁木齐市| 梁平县| 崇礼县| 偏关县| 南昌县| 孙吴县| 封丘县|