首先啟動專案soul-admin以及soul-bootstrap,以soul-examples
中的soul-example-http
為例,註冊到soul閘道器上。同時在soul-admin外掛程式管理中心開啟hystrix
外掛程式
同時配置selector
以及相關的rule
,這裡以http://localhost:9195/http/order/findbyid?id=2
為例,制定相應的熔斷策略
設定這些規則以後,我們用superbenchmarker
進行壓測
從soul閘道器控制台日誌中可以看到以下日誌,說明壓測會觸發hystrix
進行斷路保護機制,
hystrix外掛程式和其他外掛程式相同,都會執行 abstractsoulplugin 類的 execute() 方法,然後在hystrixplugin
中覆寫doexecute
方法,核心**如下
為了更好的理解hystrix工作原理,這裡附上官方文件flow chart
簡單來講,hystrix會將乙個請求包裝成乙個 hystrixcommand 或者 hystrixobservablecommand 物件,然後執行hystrix command,然後根據cache以及相應的隔離模式來進行fallback處理或者返回乙個成功的response。值得注意的是,hystrixcommand執行的時候都會直接或間接的呼叫toobservable().toblocking().tofuture()
,因此每個command都依賴於observable
的實現。
在hystrix外掛程式中提供了乙個command
介面,並且根據semaphore隔離模式和執行緒池隔離模式實現了兩個不同的command類:hystrixcommand
和hystrixcommandonthread
。
在hystrixplugin會根據soul-admin同步的資料建立hystrixhandle
物件,並通過fetchcommand()方法根據隔離模式來建立不同的command來執行。核心**如下
hystrix外掛程式的底層原理大概就是如上所述,如果想深究hystrix的工作原理,可以參考官方文件: hystrix: how it works. soul閘道器裡所做的就是把hystrix依賴做了又一層的封裝,讓hystrix外掛程式化來體現熱插拔的設計思想。稍後會對resilienc4j
以及sentinel
外掛程式進行進一步解析。
Soul原始碼總結 01 20
總結首先啟動soul admin和soul bootstrap專案,在soul bootstrap控制台日誌會發現 soul admin與soul閘道器預設建立websocket通訊,那麼具體在 中是如何實現的呢?soul sync websocket urls ws localhost 9095 ...
Soul原始碼總結 01 22
總結 不要忘記檢查pom.xml中是否加入相關依賴項 啟動soul admin和soul bootstrap專案,在soul bootstrap控制台看到以下日誌 說明此時http長輪詢同步機制建立成功.soul閘道器http長輪詢機制可以參考官網的圖示以及說明 soul http long pol...
Soul原始碼總結 01 26
divideplugin主要soul閘道器處理http protocol的主要外掛程式,當有http請求打到soul閘道器的時候,soulwebhandler會執行divideplugin來對http請求做相應的處理。divideplugin做的處理主要是對http請求進行 主要原理是根據不同的負載...