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

Spring中使用Hystrix實現(xiàn)熔斷詳解

 更新時間:2023年12月14日 08:32:18   作者:Terisadeng  
這篇文章主要介紹了Java中使用Hystrix實現(xiàn)熔斷詳解,對于第一個問題,查看hystrix源碼可以看到,如果有緩存配置是優(yōu)先使用的緩存的,因此如果配置更新,必須要更新緩存,不能使用Hystrix.reset()方法來更新緩存,需要的朋友可以參考下

Hystrix實現(xiàn)熔斷

在使用Hystrix實現(xiàn)熔斷的過程中遇到了兩個問題

1、在修改了熔斷配置之后不生效的問題

2、熔斷后不恢復(fù)的問題

對于第一個問題,查看hystrix源碼可以看到,如果有緩存配置是優(yōu)先使用的緩存的,因此如果配置更新,必須要更新緩存,不能使用Hystrix.reset()方法來更新緩存,這個方法清理全局緩存,會影響其他commandkey的熔斷狀態(tài)。

public static HystrixCircuitBreaker getInstance(HystrixCommandKey key, HystrixCommandGroupKey group, HystrixCommandProperties properties, HystrixCommandMetrics metrics) {
            // this should find it for all but the first time
            HystrixCircuitBreaker previouslyCached = circuitBreakersByCommand.get(key.name());
            if (previouslyCached != null) {
                return previouslyCached;
            }

官方提供的方法是通過archaius動態(tài)更新

Hystrix uses Archaius for the default implementation of properties for configuration.

實現(xiàn)接口com.netflix.config.PolledConfigurationSource,將對應(yīng)的commandkey通過形如下面的key來放入poll方法響應(yīng)的map中,hystrix會根據(jù)這個key自動更新緩存

hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds

第二個問題經(jīng)過debughystrix源碼發(fā)現(xiàn)是由于,使用了響應(yīng)式的調(diào)用,hystrix使用的是V1版本的rxjava,而項目使用的是V3版本的rxjava,在V3轉(zhuǎn)V1后響應(yīng)給hystrixcircuitbreaker時,hystrix沒有收到oncomplete事件,導(dǎo)致沒有在斷路器半開狀態(tài)時調(diào)用成功關(guān)閉斷路器。

在com.netflix.hystrix.AbstractCommand類中實現(xiàn)了斷路器的控制邏輯:

可以看到在onCompleted的觀察者邏輯中會將斷路器markSuccess

private Observable<R> executeCommandAndObserve(final AbstractCommand<R> _cmd) {
        final HystrixRequestContext currentRequestContext = HystrixRequestContext.getContextForCurrentThread();
 
        final Action1<R> markEmits = new Action1<R>() {
            @Override
            public void call(R r) {
                if (shouldOutputOnNextEvents()) {
                    executionResult = executionResult.addEvent(HystrixEventType.EMIT);
                    eventNotifier.markEvent(HystrixEventType.EMIT, commandKey);
                }
                if (commandIsScalar()) {
                    long latency = System.currentTimeMillis() - executionResult.getStartTimestamp();
                    eventNotifier.markCommandExecution(getCommandKey(), properties.executionIsolationStrategy().get(), (int) latency, executionResult.getOrderedList());
                    eventNotifier.markEvent(HystrixEventType.SUCCESS, commandKey);
                    executionResult = executionResult.addEvent((int) latency, HystrixEventType.SUCCESS);
                    circuitBreaker.markSuccess();
                }
            }
        };
 
        final Action0 markOnCompleted = new Action0() {
            @Override
            public void call() {
                if (!commandIsScalar()) {
                    long latency = System.currentTimeMillis() - executionResult.getStartTimestamp();
                    eventNotifier.markCommandExecution(getCommandKey(), properties.executionIsolationStrategy().get(), (int) latency, executionResult.getOrderedList());
                    eventNotifier.markEvent(HystrixEventType.SUCCESS, commandKey);
                    executionResult = executionResult.addEvent((int) latency, HystrixEventType.SUCCESS);
                    circuitBreaker.markSuccess();
                }
            }
        };

目前想到的解決辦法是一種是在接收調(diào)用服務(wù)響應(yīng)時blockingfirst(),但是這樣會導(dǎo)致異步調(diào)用變成同步,還有一種是在調(diào)用服務(wù)的Observable的onnext方法中添加onCompleted事件,來通知hystrix調(diào)用服務(wù)接收到了complete事件,但是這樣就只能接收到單個onNext事件,兩種都有缺點(diǎn),還有想到更好的解決辦法。

到此這篇關(guān)于Spring中使用Hystrix實現(xiàn)熔斷詳解的文章就介紹到這了,更多相關(guān)Hystrix實現(xiàn)熔斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?+?ECharts實現(xiàn)數(shù)據(jù)可視化的案例詳解

    Spring?+?ECharts實現(xiàn)數(shù)據(jù)可視化的案例詳解

    Apache?ECharts是一個基于?JavaScript?的開源可視化圖表庫,在網(wǎng)頁上實現(xiàn)數(shù)據(jù)的可視化,非常好用,本文將通過一個簡單的demo來給大家介紹一下Spring?+?ECharts如何數(shù)據(jù)可視化,需要的朋友可以參考下
    2023-07-07
  • 解決Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問題

    解決Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問題

    這篇文章主要介紹了Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • eclipse如何搭建Springboot項目詳解

    eclipse如何搭建Springboot項目詳解

    今天帶大家學(xué)習(xí)eclipse如何搭建Spring boot項目,文中有非常詳細(xì)的圖文解說,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot修改子模塊Module的jdk版本的方法 附修改原因

    SpringBoot修改子模塊Module的jdk版本的方法 附修改原因

    這篇文章主要介紹了SpringBoot修改子模塊Module的jdk版本的方法 附修改原因,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • java字符串遍歷的幾種常用方法總結(jié)

    java字符串遍歷的幾種常用方法總結(jié)

    Java字符串是一系列的Unicode字符序列,但是它卻常常被誤認(rèn)為是char序列,這篇文章主要給大家介紹了關(guān)于java字符串遍歷的幾種常用方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • SpringBoot與Elasticsearch8.0集成的實現(xiàn)步驟

    SpringBoot與Elasticsearch8.0集成的實現(xiàn)步驟

    本文介紹了SpringBoot與Elasticsearch8.0的集成方法和最佳實踐,詳細(xì)探討了Elasticsearch8.0的安全增強(qiáng)、性能優(yōu)化、API改進(jìn)等新特性,下面就一起來了解一下
    2026-04-04
  • Java之Algorithm_analysis案例詳解

    Java之Algorithm_analysis案例詳解

    這篇文章主要介紹了Java之Algorithm_analysis案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java經(jīng)典面試題匯總:Spring MVC

    Java經(jīng)典面試題匯總:Spring MVC

    本篇總結(jié)的是Spring MVC框架相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • java字符串常用操作方法(查找、截取、分割)

    java字符串常用操作方法(查找、截取、分割)

    今天小編就為大家分享一篇java字符串常用操作方法(查找、截取、分割),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 解決Maven中關(guān)于依賴導(dǎo)入不進(jìn)的問題

    解決Maven中關(guān)于依賴導(dǎo)入不進(jìn)的問題

    這篇文章主要介紹了解決Maven中關(guān)于依賴導(dǎo)入不進(jìn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評論

磴口县| 崇仁县| 来宾市| 喀喇| 兴国县| 哈尔滨市| 新龙县| 延边| 禄劝| 安阳市| 柯坪县| 崇左市| 青神县| 汶上县| 高阳县| 璧山县| 无极县| 小金县| 北川| 普安县| 长乐市| 八宿县| 麻栗坡县| 禹城市| 雷山县| 滦南县| 论坛| 垣曲县| 太仆寺旗| 江永县| 墨竹工卡县| 康马县| 囊谦县| 五常市| 阿荣旗| 藁城市| 佛坪县| 清新县| 自贡市| 安阳市| 揭阳市|