SpringCloud之Hystrix應用實踐

2021-08-15 08:30:17 字數 2964 閱讀 6420

使用springcloud的hystrix功能,有幾種方式:

1、單應用監聽,也可以用於測試

引用包:

org.springframework.boot

spring-boot-starter-actuator

org.springframework.cloud

spring-cloud-starter-hystrix

org.springframework.cloud

spring-cloud-starter-hystrix-dashboard

unable to connect to command metric stream

如下:

修改monitor位址後為:

使用hystrix示例:

@enablediscoveryclient

@enablecircuitbreaker

@enablehystrixdashboard

public class monitorserverboot

}

模擬呼叫失敗情況:

@component

public class calldependencyservice else

}public string fallback()

}

若想看到效果斷路效果,需要呼叫失敗服務

特別說明:

@enablehystrix與@enablecircuitbreaker效果一樣,都是enablecircuitbreaker,所以建議直接使用@enablecircuitbreaker註解

@hystrixcommand註解與@enablecircuitbreaker配合使用,否則無效

如果你使用了feign,feign是自帶斷路器的,並且是已經開啟了。如果使用feign不想用斷路器的話,可以在配置檔案中關閉它,配置如下:feign.hystrix.enabled=false

如果這個區域一直為loading..... 表示很可能沒有使用執行緒隔離方式,而是訊號模式

hystrix.command.default.execution.isolation.strategy= thread|semaphore
應用場景選擇:

執行緒池隔離: 

1、 第三方應用或者介面 

2、 併發量大

訊號量隔離: 

1、 內部應用或者中介軟體(redis) 

2、 併發需求不大

hystrix.command.default和hystrix.threadpool.default中的default為預設commandkey

hystrix.command.default.execution.isolation.thread.timeoutinmilliseconds 命令執行超時時間,預設1000ms

hystrix.command.default.execution.timeout.enabled 執行是否啟用超時,預設啟用true

hystrix.command.default.execution.isolation.thread.interruptontimeout 發生超時是是否中斷,預設true

hystrix.command.default.execution.isolation.semaphore.maxconcurrentrequests 最大併發請求數,預設10,該引數當使用executionisolationstrategy.semaphore策略時才有效。如果達到最大併發請求數,請求會被拒絕。理論上選擇semaphore size的原則和選擇thread size一致,但選用semaphore時每次執行的單元要比較小且執行速度快(ms級別),否則的話應該用thread。

semaphore應該佔整個容器(tomcat)的執行緒池的一小部分。

這些引數可以應用於hystrix的thread和semaphore策略

hystrix.command.default.requestcache.enabled 預設true,需要過載getcachekey(),返回null時不快取

hystrix.command.default.requestlog.enabled 記錄日誌到hystrixrequestlog,預設true

hystrix.collapser.default.maxrequestsinbatch 單次批處理的最大請求數,達到該數量觸發批處理,預設integer.max_value

hystrix.collapser.default.timerdelayinmilliseconds 觸發批處理的延遲,也可以為建立批處理的時間+該值,預設10

hystrix.collapser.default.requestcache.enabled 是否對hystrixcollapser.execute() and hystrixcollapser.queue()的cache,預設true

執行緒數預設值10適用於大部分情況(有時可以設定得更小),如果需要設定得更大,那有個基本得公式可以follow:

requests per second at peak when healthy × 99th percentile latency in seconds + some breathing room

每秒最大支撐的請求數 (99%平均響應時間 + 快取值)

比如:每秒能處理1000個請求,99%的請求響應時間是60ms,那麼公式是:

1000 (0.060+0.012)

基本得原則時保持執行緒池盡可能小,他主要是為了釋放壓力,防止資源被阻塞。

當一切都是正常的時候,執行緒池一般僅會有1到2個執行緒啟用來提供服務

學習SpringCloud之斷路器Hystrix

以下示例均基於springcloud的greenwich.sr1版本。org.springframework.cloudgroupid spring cloud starter netflix hystrixartifactid dependency dependencies 以 enablehys...

SpringCloud之Dashboard 流監控

新建springcloud consumer hystrix dashboard模組 新增依賴 org.springframework.cloudgroupid spring cloud starter hystrixartifactid 1.4.6.releaseversion dependenc...

SpringCloud學習之eureka集群配置

如果是單節點的註冊中心,是無法保證系統穩定性的,當然現在專案部署架構不可能是單節點的。集群節點的部署思路 通過執行多個例項並請求他們相互註冊,來完成註冊中心的高可用性 結伴註冊 注意 用於本機模擬的前期準備工作 將電腦上hosts 新增如下配置 linux下位置 etc hosts 127.0.0....