亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

我們要從根源上解決問題,比如一個(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)問題,Hystrix作為開源庫,以斷路器的角色存在著。

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 = {
            //超過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ù)訪問失敗,降級(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)類是調(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類里面的熔斷方式,可以配置多個(gè)出發(fā)服務(wù)熔斷的屬性,從而更好的斷路保護(hù)服務(wù)。

@Service
@Slf4j
public class HystrixServiceImpl implements IHystrixService {
    //服務(wù)熔斷
    @HystrixCommand(fallbackMethod = "fallback",commandProperties = {
            @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),  //是否開啟斷路器
            @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面試題沖刺第二十四天--并發(fā)編程

    Java面試題沖刺第二十四天--并發(fā)編程

    這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于數(shù)據(jù)庫的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java8新特性之深入解析日期和時(shí)間_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java8新特性之深入解析日期和時(shí)間_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java8新特性之深入解析日期和時(shí)間_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下
    2017-06-06
  • 關(guān)于HashMap相同key累加value的問題

    關(guān)于HashMap相同key累加value的問題

    這篇文章主要介紹了關(guān)于HashMap相同key累加value的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • SpringMVC?RESTFul實(shí)體類創(chuàng)建及環(huán)境搭建

    SpringMVC?RESTFul實(shí)體類創(chuàng)建及環(huán)境搭建

    這篇文章主要為大家介紹了SpringMVC?RESTFul實(shí)體類創(chuàng)建及環(huán)境搭建詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • SpringBoot+SpringBatch+Quartz整合定時(shí)批量任務(wù)方式

    SpringBoot+SpringBatch+Quartz整合定時(shí)批量任務(wù)方式

    這篇文章主要介紹了SpringBoot+SpringBatch+Quartz整合定時(shí)批量任務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java自帶的加密類MessageDigest類代碼示例

    Java自帶的加密類MessageDigest類代碼示例

    這篇文章主要介紹了Java自帶的加密類MessageDigest類代碼示例,分享了常見的三種加密方式代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • MyBatis源碼分析之日志記錄詳解

    MyBatis源碼分析之日志記錄詳解

    這篇文章主要給大家介紹了關(guān)于MyBatis源碼分析之日志記錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 如何基于Jenkins構(gòu)建Jmeter項(xiàng)目

    如何基于Jenkins構(gòu)建Jmeter項(xiàng)目

    這篇文章主要介紹了如何基于Jenkins構(gòu)建Jmeter項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java微信支付接入流程詳解

    java微信支付接入流程詳解

    這篇文章主要為大家詳細(xì)介紹了java微信支付接入流程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 解決springjpa的局部更新字段問題

    解決springjpa的局部更新字段問題

    這篇文章主要介紹了解決springjpa的局部更新字段問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評(píng)論