摘要:一個(gè)啥都不做的斷路器,它允許所有請(qǐng)求通過(guò),并且斷路器始終處于閉合狀態(tài)斷路器的另一個(gè)實(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(): 每個(gè)Hystrix命令的請(qǐng)求都通過(guò)它判斷是否被執(zhí)行(已經(jīng)不再使用,使用attemptExecution()方法進(jìn)行判斷)
attemptExecution(): 每個(gè)Hystrix命令的請(qǐng)求都通過(guò)它判斷是否被執(zhí)行
isOpen(): 返回當(dāng)前斷路器是否打開
markSuccess(): 用來(lái)關(guān)閉斷路器
markNonSuccess: 用來(lái)打開斷路器
下面看一下該接口中的類:
Factory: 維護(hù)了一個(gè)Hystrix命令和HystrixCircuitBreaker的關(guān)系的集合ConcurrentHashMap
NoOpCircuitBreaker: 一個(gè)啥都不做的斷路器,它允許所有請(qǐng)求通過(guò),并且斷路器始終處于閉合狀態(tài)
HystrixCircuitBreakerImpl:斷路器的另一個(gè)實(shí)現(xiàn)類。
在該類中定義了斷路器的五個(gè)核心對(duì)象:
HystrixCommandProperties properties:斷路器對(duì)應(yīng)實(shí)例的屬性集合對(duì)象/斷路器對(duì)應(yīng)HystrixCommand實(shí)例的屬性對(duì)象
HystrixCommandMetrics metrics:用來(lái)讓HystrixCommand記錄各類度量指標(biāo)的對(duì)象
AtomicReference
AtomicLong circuitOpened:斷路器打開的時(shí)間戳,默認(rèn)-1,表示斷路器未打開
AtomicReference
對(duì)接口的實(shí)現(xiàn)如下:
@Override public boolean isOpen() { if (properties.circuitBreakerForceOpen().get()) { return true; } if (properties.circuitBreakerForceClosed().get()) { return false; } return circuitOpened.get() >= 0; }
用來(lái)判斷斷路器是否打開或關(guān)閉。主要步驟有:
如果斷路器強(qiáng)制打開,返回true
如果斷路器強(qiáng)制關(guān)閉,返回false
判斷circuitOpened的值,如果大于等于0,返回true, 否則返回false
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77428.html
摘要:斷路器原理斷路器在和執(zhí)行過(guò)程中起到至關(guān)重要的作用。其中通過(guò)來(lái)定義,每一個(gè)命令都需要有一個(gè)來(lái)標(biāo)識(shí),同時(shí)根據(jù)這個(gè)可以找到對(duì)應(yīng)的斷路器實(shí)例。一個(gè)啥都不做的斷路器,它允許所有請(qǐng)求通過(guò),并且斷路器始終處于閉合狀態(tài)斷路器的另一個(gè)實(shí)現(xiàn)類。 斷路器原理 斷路器在HystrixCommand和HystrixObservableCommand執(zhí)行過(guò)程中起到至關(guān)重要的作用。查看一下核心組件HystrixCi...
摘要:斷路器模式也使系統(tǒng)能夠檢測(cè)出錯(cuò)誤是否已被修復(fù)。斷路器模式的目的和重試模式有所不同。斷路器模式為在從錯(cuò)誤中恢復(fù)的系統(tǒng)提供穩(wěn)定性,同時(shí)降低對(duì)性能的影響。 斷路器模式 當(dāng)連接到遠(yuǎn)程服務(wù)或資源到時(shí)候,處理那些需要一段時(shí)間才能修復(fù)的系統(tǒng)缺陷。這能優(yōu)化應(yīng)用對(duì)穩(wěn)定性和可靠性。 上下文和問(wèn)題 在分布式環(huán)境中,對(duì)遠(yuǎn)端服務(wù)或資源的請(qǐng)求可能會(huì)由于諸如以下臨時(shí)性錯(cuò)誤而失?。壕徛木W(wǎng)絡(luò)請(qǐng)求,連接超時(shí),資源被過(guò)度...
摘要:本系列代碼地址上一節(jié)我們通過(guò)單元測(cè)試驗(yàn)證了線程隔離的正確性,這一節(jié)我們來(lái)驗(yàn)證我們斷路器的正確性,主要包括驗(yàn)證配置正確加載即我們?cè)谂渲美缰械募尤氲牡呐渲帽徽_加載應(yīng)用了。本系列代碼地址:https://github.com/JoJoTec/spring-cloud-parent上一節(jié)我們通過(guò)單元測(cè)試驗(yàn)證了線程隔離的正確性,這一節(jié)我們來(lái)驗(yàn)證我們斷路器的正確性,主要包括:驗(yàn)證配置正確加載:即我們...
閱讀 4090·2021-10-08 10:12
閱讀 4952·2021-09-02 15:40
閱讀 1064·2021-09-01 11:09
閱讀 1677·2021-08-31 09:38
閱讀 2593·2019-08-30 13:54
閱讀 2304·2019-08-30 12:54
閱讀 1287·2019-08-30 11:18
閱讀 1465·2019-08-29 14:06