Soul原始碼總結 01 29

2021-10-18 07:54:10 字數 1724 閱讀 4291

首先啟動專案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類:hystrixcommandhystrixcommandonthread

在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請求進行 主要原理是根據不同的負載...