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

在項(xiàng)目中直接使用hystrix的流程分析

 更新時(shí)間:2022年06月06日 09:38:22   作者:編號(hào)94530  
最近由于一些背景原因,需要在項(xiàng)目中需要對(duì)接口進(jìn)行限流。所以就考慮到了直接使用Hystrix,但是呢,又不想直接使用SpringCloud,而是直接引入原生,現(xiàn)在發(fā)現(xiàn)挺好用的,所以記錄下來(lái),需要的朋友參考下吧

什么是Hystrix

Hystrix是Netflix針對(duì)微服務(wù)分布式系統(tǒng)的熔斷保護(hù)中間件,當(dāng)我們的客戶(hù)端連接遠(yuǎn)程的微服務(wù)時(shí),有兩種情況需要考慮:首先,如果遠(yuǎn)程系統(tǒng)當(dāng)機(jī)了我們?cè)趺崔k?

其次,我們?nèi)绾喂芾韺?duì)遠(yuǎn)程微服務(wù)的調(diào)用性能,以保證每個(gè)微服務(wù)以最小延遲最快性能響應(yīng)?

Hystrix是一個(gè)有關(guān)延遲和失敗容錯(cuò)的開(kāi)源庫(kù)包,用來(lái)設(shè)計(jì)隔離訪(fǎng)問(wèn)遠(yuǎn)程系統(tǒng)端點(diǎn)或微服務(wù)等,防止級(jí)聯(lián)爆炸式的失敗,也就是由一個(gè)小問(wèn)題引起接二連三擴(kuò)大的

瘋狂的錯(cuò)誤爆炸直至整個(gè)系統(tǒng)癱瘓,能夠讓復(fù)雜的分布式系統(tǒng)更加靈活具有彈性。這篇文章給大家介紹下在項(xiàng)目中如何直接使用hystrix?

一、背景

最近由于一些背景原因,需要在項(xiàng)目中需要對(duì)接口進(jìn)行限流。所以就考慮到了直接使用Hystrix。但是呢,又不想直接使用SpringCloud,而是直接引入原生,現(xiàn)在發(fā)現(xiàn)挺好用的,所以記錄下來(lái),分享出來(lái)。

二、使用方式

2.1 Jar包引入

<dependency>
  <groupId>com.netflix.hystrix</groupId>
  <artifactId>hystrix-javanica</artifactId>
  <version>1.5.18</version>
</dependency>

<dependency>
  <groupId>com.netflix.hystrix</groupId>
  <artifactId>hystrix-core</artifactId>
  <version>1.5.18</version>
</dependency>

引入兩個(gè)包,分別是Hystrix核心包,以及直接原生的Java包

2.2 配置文件

在Resources目錄下面,放上hystrix.properties文件。配置如下。

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=1000
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
hystrix.command.default.metrics.rollingStats.numBuckets=10
hystrix.command.default.metrics.rollingStats.timeInMilliseconds=10000
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50
hystrix.command.default.circuitBreaker.forceOpen=false
hystrix.command.default.circuitBreaker.forceClosed=false
hystrix.command.default.requestCache.enabled=false

hystrix.threadpool.default.coreSize=10
hystrix.threadpool.default.maximumSize=10
hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize=true
hystrix.threadpool.default.keepAliveTimeMinutes=1
hystrix.threadpool.default.maxQueueSize=100
hystrix.threadpool.default.queueSizeRejectionThreshold=101
hystrix.threadpool.default.metrics.rollingStats.numBuckets=10
hystrix.threadpool.default.metrics.rollingStats.timeInMilliseconds=10000
#hystrix.timer.threadpool.default.coreSize = 10

這個(gè)是一部分配置,如果需要知道更多,可以Click-Github Hystrix Wiki

2.3 設(shè)置配置

設(shè)置Hystrix的配置

/**
 * <p>熔斷器配置</p>
 *
 * @author fattycal@qq.com
 * @since 2022/6/4
 */
@Configuration
public class HystrixConfig implements InitializingBean {

    @Bean
    public HystrixCommandAspect hystrixCommandAspect(){
        // 初始化切面
        return new HystrixCommandAspect();
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        // 初始化熔斷器配置
        // 清除配置
        ConfigurationManager.getConfigInstance().clear();
        // 加載配置文件
        ConfigurationManager.loadCascadedPropertiesFromResources("hystrix");
    }
}

HystrixCommandAspect是jar包帶的切面,通過(guò)切面通知,找去需要熔斷的方法,然后進(jìn)行處理。

@Aspect
public class HystrixCommandAspect {
    //...略

    @Pointcut("@annotation(com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand)")
    public void hystrixCommandAnnotationPointcut() {
    }

  @Pointcut("@annotation(com.netflix.hystrix.contrib.javanica.annotation.HystrixCollapser)")
    public void hystrixCollapserAnnotationPointcut() {
    }

    @Around("hystrixCommandAnnotationPointcut() || hystrixCollapserAnnotationPointcut()")
    public Object methodsAnnotatedWithHystrixCommand(final ProceedingJoinPoint joinPoint) throws Throwable {
        // ... 略
    }
}

ConfigurationManager看看這名字,就知道是配置管理的,也不負(fù)眾望,的確是用來(lái)加載配置的。

2.4 實(shí)現(xiàn)代碼

/**
 * <p>熔斷器測(cè)試</p>
 *
 * @author fattycal@qq.com
 * @since 2022/6/4
 */
@RestController
public class HystrixTestController {


    @GetMapping("/hystrix")
    @HystrixCommand(commandKey = "hystrixTestController-getHello", threadPoolKey = "hystrixTestController-getHello",
            fallbackMethod = "getHelloFallback")
    public String getHello(){
        try {
            // 執(zhí)行太快不便于測(cè)試
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "TEST Hystrix";
    }

    public String getHelloFallback(Throwable error){
        // 打印日志
        System.out.println("TEST Hystrix: " + error.getMessage());
        return "TEST Hystrix: " + error.getMessage();
    }
}

代碼沒(méi)有啥花里胡哨的,直接在需要熔斷的方法上面加上HystrixCommond。

commandKeythreadPoolKey是自己設(shè)置的,可以為這個(gè)方法定制線(xiàn)程數(shù)、核心線(xiàn)程等配置(在hystrix.properties中添加)。給出示例如下。

#-------------------------------------------------------------------
hystrix.threadpool.hystrixTestController-getHello.coreSize=1
hystrix.threadpool.hystrixTestController-getHello.maximumSize=2
hystrix.threadpool.hystrixTestController-getHello.maxQueueSize=1
hystrix.threadpool.hystrixTestController-getHello.queueSizeRejectionThreshold=2
#-------------------------------------------------------------------

至此,完成了所有的配置和準(zhǔn)備,接下來(lái)直接測(cè)試

三、測(cè)試試驗(yàn)

直接從Jmeter官網(wǎng)下載jmeter,拿到跑測(cè)試, 具體下載過(guò)程就不一樣展示了,直接貼出測(cè)試結(jié)果。

由于為這個(gè)方法設(shè)置的核心線(xiàn)程數(shù)、線(xiàn)程數(shù)、隊(duì)列數(shù)都不大,很容易測(cè)試出結(jié)果。我們可以從console中很明顯的看到熔斷器打開(kāi),說(shuō)明方法被執(zhí)行到。

在從Jmeter中查看一下結(jié)果,也是可以佐證我們的效果。測(cè)試圖如下:

四、總結(jié)

自此,整個(gè)流程是走完了,可以看到效果著實(shí)起來(lái)了。 Hystrix知識(shí)限流熔斷中的一種方案,大家可以結(jié)合實(shí)際情況做出更多的選擇。

相關(guān)文章

  • 使用springBoot中的info等級(jí)通過(guò)druid打印sql

    使用springBoot中的info等級(jí)通過(guò)druid打印sql

    這篇文章主要介紹了使用springBoot中的info等級(jí)通過(guò)druid打印sql,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解Java的Exception異常機(jī)制

    詳解Java的Exception異常機(jī)制

    Java的Exception異常機(jī)制,為什么會(huì)突然聊到異常?其實(shí)不是突然,而是我已經(jīng)準(zhǔn)備了很久,但苦于沒(méi)有好的例子來(lái)講解,從表象到底層實(shí)現(xiàn),今天就帶大家詳細(xì)了解Exception異常,需要的朋友可以參考下
    2021-05-05
  • JDK的下載、安裝與部署圖文教程

    JDK的下載、安裝與部署圖文教程

    這篇文章主要為大家詳細(xì)介紹了JDK的下載、安裝與部署圖文教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java解析照片拿到GPS位置數(shù)據(jù)的詳細(xì)步驟

    Java解析照片拿到GPS位置數(shù)據(jù)的詳細(xì)步驟

    這篇文章主要介紹了Java解析照片拿到GPS位置數(shù)據(jù),本文給大家介紹代碼環(huán)境及核心代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • java中匿名內(nèi)部類(lèi)解讀分析

    java中匿名內(nèi)部類(lèi)解讀分析

    本篇文章介紹了,java中匿名內(nèi)部類(lèi)解讀分析。需要的朋友參考下
    2013-05-05
  • 使用Java實(shí)現(xiàn)RabbitMQ延時(shí)隊(duì)列

    使用Java實(shí)現(xiàn)RabbitMQ延時(shí)隊(duì)列

    RabbitMQ?延時(shí)隊(duì)列是指消息在發(fā)送到隊(duì)列后,并不立即被消費(fèi)者消費(fèi),而是等待一段時(shí)間后再被消費(fèi)者消費(fèi),本文為大家介紹了實(shí)現(xiàn)RabbitMQ延時(shí)隊(duì)列的Java代碼,希望對(duì)大家有所幫助
    2023-06-06
  • Java多線(xiàn)程深入理解

    Java多線(xiàn)程深入理解

    這篇文章主要介紹了java多線(xiàn)程編程實(shí)例,分享了幾則多線(xiàn)程的實(shí)例代碼,具有一定參考價(jià)值,加深多線(xiàn)程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-07-07
  • mybatis修改int型數(shù)據(jù)無(wú)法修改成0的解決

    mybatis修改int型數(shù)據(jù)無(wú)法修改成0的解決

    這篇文章主要介紹了mybatis修改int型數(shù)據(jù)無(wú)法修改成0的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java實(shí)現(xiàn)24點(diǎn)游戲

    java實(shí)現(xiàn)24點(diǎn)游戲

    每次取出4張牌,使用加減乘除,第一個(gè)能得出24者為贏(yíng),這篇文章主要就為大家詳細(xì)介紹了java實(shí)現(xiàn)24點(diǎn)游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java通過(guò)在主循環(huán)中判斷Boolean來(lái)停止線(xiàn)程的方法示例

    Java通過(guò)在主循環(huán)中判斷Boolean來(lái)停止線(xiàn)程的方法示例

    這篇文章主要介紹了Java通過(guò)在主循環(huán)中判斷Boolean來(lái)停止線(xiàn)程的方法,結(jié)合具體實(shí)例形式分析了java針對(duì)線(xiàn)程的判斷與停止操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04

最新評(píng)論