1. 程式人生 > >Spring Cloud Hystrix屬相詳解

Spring Cloud Hystrix屬相詳解

概述

這篇文章主要介紹的是Hystrix的屬相詳解。當涉及到Hystrix屬性配置的時候,我們可以使用兩種方式。
1.通過繼承的方式實現,可以使用setter物件對請求命令的屬性進行設定。
2.通過註解的方式實現,只是需要@HystrixCommand中的commandProperties屬性來設定。

屬性的優先順序

這裡存在的是在屬性的優先順序的問題優先順序由低到高的是:
1. 全域性預設值:如果沒有設定屬性,那麼這個屬性就是預設值。
2. 全域性配置屬性:通過在配置檔案中定義全域性屬性值,在應用啟動時或者是在Spring Cloud Config和Spring Cloud Bus實現的
		動態重新整理配置功能的配合下,可以實現全域性配置屬性覆蓋全域性預設值。
4. 例項預設值:通過程式碼為例項定義的預設值。
5. 例項配置屬性:通過配置檔案來對指定的例項進行屬性配置,可以覆蓋前三個預設值,也可以使用Spring Cloud Config	
		和Spring Cloud Bus實現的動態重新整理配置功能對具體例項配置的動態調整。

command屬性

作用: 控制HystrixCommand命令的行為。
主要有五種不同型別的屬性配置。
execution配置:控制的是HystrixCommand.run()方法的執行。
execution.isolation.strategy:該屬性用來設定HystrixCommand.run ()執行的隔離策略,它有			 						
如下兩個選項。
THREAD:通過執行緒池隔離的策略。它在獨立的執行緒上執行,並且它的併發限制受執行緒池中執行緒數量的限制。
SEMAPHORE:通過訊號量隔離的策略。它在呼叫執行緒上執行,並且它的併發限制受訊號量計數的限制。

在這裡插入圖片描述

execution.isolation.thread.timeoutInMilliseconds:該屬性用來配置HystrixCommand執行的超時時間,單位為毫秒。當
HystrixCommand執行時間超過該配置值之後, Hystrix會將該執行命令標記為TIMEOUT並進入服務降級處理邏輯。
屬性級別 預設值,配置方式,配置屬性
全域性預設值 1000毫秒
全域性屬性配置 hystrix.command.default.execution.isolation. thread.timeoutIn-Milliseconds
例項預設值 通過HystrixCommandProperties.Setter().withExecutionTimeoutIn-Milliseconds (int value)設定, 也可通過@HystrixProperty (name=“execution.isolation.thread.timeoutInMilliseconds”, value=" 2000")
例項配置屬性 hystrix.command. HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
execution.timeout.enabled:該屬性來配置HystrixCommand.run()的執行是否啟用超時時間,預設是
true,如果是false,則execution.isolation.thread.timeOutInMilliseconds屬性的配置不能生效。

在這裡插入圖片描述

execution.isolation.thread.interruptOnTimeOut:該屬性來配置當HystrixCommand.run執行超時的時候是否要將他中斷。

在這裡插入圖片描述

execution.isolation. semaphore.maxConcurrentRequests:當HystrixCommand的隔離策略使用訊號量的時候,該屬性用來配置
訊號量的大小(併發請求數)。當最大併發請求數達到該設定值時,後續的請求將會被拒絕

在這裡插入圖片描述

fallback配置

這些屬性是來控制HystrixCommand.getFallback()的執行,這些屬性同時適用於執行緒池的訊號量的隔離操作。
fallback.isolation.semaphore.maxConcurrentRequests:該屬性用來設定從呼叫執行緒中允許HystrixCommand. getFal1back ()
方法執行的最大併發請求數。當達到最大併發請求數時,後續的請求將會被拒絕並丟擲異常(因為它已經沒有後續的fallback
可以被呼叫了)

在這裡插入圖片描述

fallback.enabled:該屬性用來設定服務降級策略是否啟用,如果設定為false,那麼當請求失敗或者拒絕發生時,將不會呼叫
HystrixCommand.getFalIback()。

在這裡插入圖片描述

circuitBreaker配置

下面這些是斷路器的屬性配置,用來控制HystrixCircuitBreaker的行為。
circuitBreakek.enabled:該屬性用來確定當服務請求命令失敗時,是否使用斷路器來跟蹤其健康指標和熔斷請求。

在這裡插入圖片描述

circuitBreaker.requestVolumeThreshold:該屬性用來設定在滾動時間窗中,斷路器熔斷的最小請求數。例如,預設該值為20的
時候,如果滾動時間窗(預設10秒)內僅收到了19個請求,即使這19個請求都失敗了,斷路器也不會開啟。

在這裡插入圖片描述

circuitBreaker.sleepwindowInMilliseconds:該屬性用來設定當斷路器開啟之後的休眠時間窗。休眠時間窗結束之後,會將斷路
器置為“半開”狀態,嘗試熔斷的請求命令,如果依然失敗就將斷路器繼續設定為“開啟”狀態,如果成功就設定為“關閉”狀態。

在這裡插入圖片描述 circuitBreaker.errorThresholdPercentage:該屬性用來設定斷路器打升的錯誤百分比條件。例如,預設值 為5000的情況下,表示在滾動時間窗中,在請求數量超過circuitBreaker.requestVolumeThreshold閾值的前提 下,如果錯誤請求數的百分比超過50,就把斷路器設定為“開啟”狀態,否則就設定為“關閉"狀態。 在這裡插入圖片描述 在這裡插入圖片描述

circuitBreaker. forceOpen:如果將該屬性設定為true,斷路器將強制進入“開啟”狀態,它會拒絕所有請求。該屬性優先於circuitBreaker. forceclosed屬性。

在這裡插入圖片描述

circuitBreaker. forceClosed:如果將該屬性設定為true,斷路器將強制進入“關閉”狀態,它會接收所有請求。如果circuitBreaker. forceOpen屬性為true,該屬性不會生效。

在這裡插入圖片描述

Thread Pool 屬性

該屬性除了在程式碼中用set和配置檔案配置之外,還可使用註解進行配置。可使用@HystrixCommand中的
threadPoolProperties屬性來設定,比如:
MaxQueueSize:該引數用來設定執行緒池的最大對列大小,當設定為-1時候,執行緒池將使用SynchronousQueue實現的對列,
否則將使用LiknedBlockIngQueue實現的對列。
屬性級別 預設值,配置方式,配置屬性
全域性預設值 -1
全域性配置屬性 hystrix.threadpool.default.maxQueuesize
例項預設值 通過HystrixThreadPoolProperties.Setter().withMaxQueuesize (intvalue)設定, 也可通過@HystrixProperty(name="maxQueuesize"value=“10”)註解來設定
例項配置屬性 hystrix.threadpool.HystrixThreadPoolKey.maxQueueSize
queueSizeRejectionThreshold:該引數用來為佇列設定拒絕閾值。通過該引數,即使佇列沒有達到最大值
也能拒絕請求。該引數主要是對LinkedBlocking-Queue佇列的補充,因為LinkedBlockingQueue佇列不能
動態修改它的物件大小,而通過該屬性就可以調整拒絕請求的佇列大小了。

在這裡插入圖片描述

metrics.rollingStats.timeInMilliseconds:該引數用來設定滾動時間窗的長度,單位為毫秒。該滾動時間窗的長度用於執行緒池的
指標度量,它會被分成多個“桶”來統計指標。
屬性級別 預設值,配置方式,配置屬性
全域性預設值 10000
全域性配置屬性 通過HystrixThreadPoolProperties.Setter().withMetricsRolling-statisticalwindowInMilliseconds (int value)設定,也可通過@HystrixProperty(name=“metrics.rollingstats.timeInMilliseconds”, value=“10”)註解來設定
例項配置屬性 hystrix.threadpool.HystrixThreadPoolKey.metrics.rollingstats.cimeInMilliseconds
metrics.rollingstats.numBuckets:該引數用來設定滾動時間窗被劃分成“桶”的數量。

在這裡插入圖片描述