摘要:一個啥都不做的斷路器,它允許所有請求通過,并且斷路器始終處于閉合狀態(tài)斷路器的另一個實(shí)現(xiàn)類。主要步驟有如果斷路器強(qiáng)制打開,返回如果斷路器強(qiáng)制關(guān)閉,返回判斷的值,如果大于等于,返回否則返回
package com.netflix.hystrix; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import com.netflix.hystrix.HystrixCommandMetrics.HealthCounts; import rx.Subscriber; import rx.Subscription; public interface HystrixCircuitBreaker { boolean allowRequest(); boolean isOpen(); void markSuccess(); void markNonSuccess(); boolean attemptExecution(); class Factory { // String is HystrixCommandKey.name() (we can"t use HystrixCommandKey directly as we can"t guarantee it implements hashcode/equals correctly) private static ConcurrentHashMapcircuitBreakersByCommand = new ConcurrentHashMap (); } class HystrixCircuitBreakerImpl implements HystrixCircuitBreaker { } static class NoOpCircuitBreaker implements HystrixCircuitBreaker { } }
下面先看一下該接口的抽象方法:
allowRequest(): 每個Hystrix命令的請求都通過它判斷是否被執(zhí)行(已經(jīng)不再使用,使用attemptExecution()方法進(jìn)行判斷)
attemptExecution(): 每個Hystrix命令的請求都通過它判斷是否被執(zhí)行
isOpen(): 返回當(dāng)前斷路器是否打開
markSuccess(): 用來關(guān)閉斷路器
markNonSuccess: 用來打開斷路器
下面看一下該接口中的類:
Factory: 維護(hù)了一個Hystrix命令和HystrixCircuitBreaker的關(guān)系的集合ConcurrentHashMap
NoOpCircuitBreaker: 一個啥都不做的斷路器,它允許所有請求通過,并且斷路器始終處于閉合狀態(tài)
HystrixCircuitBreakerImpl:斷路器的另一個實(shí)現(xiàn)類。
在該類中定義了斷路器的五個核心對象:
HystrixCommandProperties properties:斷路器對應(yīng)實(shí)例的屬性集合對象/斷路器對應(yīng)HystrixCommand實(shí)例的屬性對象
HystrixCommandMetrics metrics:用來讓HystrixCommand記錄各類度量指標(biāo)的對象
AtomicReference
AtomicLong circuitOpened:斷路器打開的時間戳,默認(rèn)-1,表示斷路器未打開
AtomicReference
對接口的實(shí)現(xiàn)如下:
@Override public boolean isOpen() { if (properties.circuitBreakerForceOpen().get()) { return true; } if (properties.circuitBreakerForceClosed().get()) { return false; } return circuitOpened.get() >= 0; }
用來判斷斷路器是否打開或關(guān)閉。主要步驟有:
如果斷路器強(qiáng)制打開,返回true
如果斷路器強(qiáng)制關(guān)閉,返回false
判斷circuitOpened的值,如果大于等于0,返回true, 否則返回false
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77428.html
摘要:斷路器原理斷路器在和執(zhí)行過程中起到至關(guān)重要的作用。其中通過來定義,每一個命令都需要有一個來標(biāo)識,同時根據(jù)這個可以找到對應(yīng)的斷路器實(shí)例。一個啥都不做的斷路器,它允許所有請求通過,并且斷路器始終處于閉合狀態(tài)斷路器的另一個實(shí)現(xiàn)類。 斷路器原理 斷路器在HystrixCommand和HystrixObservableCommand執(zhí)行過程中起到至關(guān)重要的作用。查看一下核心組件HystrixCi...
摘要:斷路器模式也使系統(tǒng)能夠檢測出錯誤是否已被修復(fù)。斷路器模式的目的和重試模式有所不同。斷路器模式為在從錯誤中恢復(fù)的系統(tǒng)提供穩(wěn)定性,同時降低對性能的影響。 斷路器模式 當(dāng)連接到遠(yuǎn)程服務(wù)或資源到時候,處理那些需要一段時間才能修復(fù)的系統(tǒng)缺陷。這能優(yōu)化應(yīng)用對穩(wěn)定性和可靠性。 上下文和問題 在分布式環(huán)境中,對遠(yuǎn)端服務(wù)或資源的請求可能會由于諸如以下臨時性錯誤而失敗:緩慢的網(wǎng)絡(luò)請求,連接超時,資源被過度...
摘要:本系列代碼地址上一節(jié)我們通過單元測試驗證了線程隔離的正確性,這一節(jié)我們來驗證我們斷路器的正確性,主要包括驗證配置正確加載即我們在配置例如中的加入的的配置被正確加載應(yīng)用了。本系列代碼地址:https://github.com/JoJoTec/spring-cloud-parent上一節(jié)我們通過單元測試驗證了線程隔離的正確性,這一節(jié)我們來驗證我們斷路器的正確性,主要包括:驗證配置正確加載:即我們...
閱讀 3828·2021-10-08 10:12
閱讀 4325·2021-09-02 15:40
閱讀 936·2021-09-01 11:09
閱讀 1605·2021-08-31 09:38
閱讀 2543·2019-08-30 13:54
閱讀 2249·2019-08-30 12:54
閱讀 1243·2019-08-30 11:18
閱讀 1399·2019-08-29 14:06