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

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

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

Hystrix實(shí)現(xiàn)熔斷

在使用Hystrix實(shí)現(xiàn)熔斷的過(guò)程中遇到了兩個(gè)問(wèn)題

1、在修改了熔斷配置之后不生效的問(wèn)題

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

對(duì)于第一個(gè)問(wèn)題,查看hystrix源碼可以看到,如果有緩存配置是優(yōu)先使用的緩存的,因此如果配置更新,必須要更新緩存,不能使用Hystrix.reset()方法來(lái)更新緩存,這個(gè)方法清理全局緩存,會(huì)影響其他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;
            }

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

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

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

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

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

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

可以看到在onCompleted的觀察者邏輯中會(huì)將斷路器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)時(shí)blockingfirst(),但是這樣會(huì)導(dǎo)致異步調(diào)用變成同步,還有一種是在調(diào)用服務(wù)的Observable的onnext方法中添加onCompleted事件,來(lái)通知hystrix調(diào)用服務(wù)接收到了complete事件,但是這樣就只能接收到單個(gè)onNext事件,兩種都有缺點(diǎn),還有想到更好的解決辦法。

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

相關(guān)文章

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

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

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

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

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

    eclipse如何搭建Springboot項(xiàng)目詳解

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

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

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

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

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

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

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

    Java之Algorithm_analysis案例詳解

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

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

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

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

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

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

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

最新評(píng)論

旬邑县| 上饶县| 鹿邑县| 手游| 红安县| 克拉玛依市| 盘锦市| 尚志市| 尚志市| 多伦县| 邵阳市| 祁阳县| 长宁县| 肇庆市| 高雄市| 东山县| 锦州市| 内黄县| 淮安市| 建湖县| 樟树市| 东安县| 洪湖市| 女性| 安乡县| 翁牛特旗| 蕲春县| 临泉县| 当雄县| 达拉特旗| 杨浦区| 定陶县| 泸定县| 江北区| 博野县| 荔波县| 德格县| 涞源县| 东光县| 鹿泉市| 彭水|