Divide插件的使用
上一篇已經(jīng)說到,Soul網(wǎng)關(guān)代理了我們自定義的一個SpringBoot服務(wù)拓诸。
這一篇蒙秒。我們就來嘗試下如何實現(xiàn)網(wǎng)關(guān)的默認(rèn)的Divide插件提供的負(fù)載均衡功能(好像也只能根據(jù)匹配的規(guī)則提供負(fù)載均衡的功能)
此選擇器為我SpringBoot服務(wù)啟動并連接到soul-admin之后默認(rèn)生成的妹笆,但是由此產(chǎn)生了一個問題块请,當(dāng)我的應(yīng)用下線之后,這個選擇器和選擇器規(guī)則并沒有下線拳缠?有待后續(xù)的研究墩新。
同時觀察表單元素。參閱Soul文檔窟坐,發(fā)現(xiàn)有如下選擇器規(guī)則
- 類型:custom flow 是自定義流量海渊。full flow 是全流量。自定義流量就是請求會走你下面的匹配方式與條件哲鸳。全流量則不走臣疑。
- 匹配方式:and 或者or 是指下面多個條件是按照and 還是or的方式來組合。
條件: - uri:是指你根據(jù)uri的方式來篩選流量徙菠,match的方式支持模糊匹配(/**)
- header:是指根據(jù)請求頭里面的字段來篩選流量讯沈。
- query: 是指根據(jù)uri的查詢條件來進(jìn)行篩選流量。
- ip:是指根據(jù)你請求的真實ip婿奔,來篩選流量缺狠。
- host:是指根據(jù)你請求的真實host问慎,來篩選流量。
- post:建議不要使用儒老。
條件匹配:
match : 模糊匹配蝴乔,建議和uri條件搭配记餐,支持 restful風(fēng)格的匹配驮樊。(/test/**)
= : 前后值相等,才能匹配片酝。
regEx : 正則匹配囚衔,表示前面一個值去匹配后面的正則表達(dá)式。
like :字符串模糊匹配雕沿。
> 但是官方文檔中练湿,并未給出創(chuàng)造了Post這種篩選方式,但是仍然不建議使用的原因审轮,期待后續(xù)的源碼的閱讀能找到答案
另外在divide插件首頁我們可以看到肥哎,我們可以添加除了默認(rèn)生成的規(guī)則之外的規(guī)則
最后實踐一下根據(jù)uri匹配的負(fù)載均衡,啟動多個客戶端程序疾渣,看看請求被轉(zhuǎn)發(fā)到那個服務(wù)上,可以看到不同負(fù)載策略的不同表現(xiàn)
同時我們在選擇器表單框內(nèi)篡诽,可以看到隨著多個客戶端程序的使用,增加了配置的情況
另外榴捡,此處的weight權(quán)重策略和選擇器規(guī)則策略誰起作用杈女?可以試下。
將選擇器配置策略調(diào)整為50吊圾,50 达椰。選擇器均衡規(guī)則調(diào)整為random。
如果選擇器規(guī)則優(yōu)先项乒,那么應(yīng)該兩個客戶端每個客戶端接收一個請求啰劲,如果均衡規(guī)則優(yōu)先。那么可以得到隨機(jī)的請求檀何,接下來我們試下
可以看到當(dāng)一個選擇器和選擇器規(guī)則同時滿足條件時呈枉,以粒度更小的選擇器規(guī)則均衡策略為準(zhǔn)。關(guān)于這個是如何實現(xiàn)的埃碱,期待后續(xù)通過源碼進(jìn)行了解
問題
- 當(dāng)我的應(yīng)用下線之后猖辫,這個默認(rèn)選擇器和選擇器規(guī)則并沒有下線?這個有什么其他的考量嗎砚殿?
- post篩選條件被創(chuàng)造啃憎,但又不建議使用的原因?
- 選擇器配置權(quán)重規(guī)則和負(fù)載規(guī)則的源碼實現(xiàn)
歡迎關(guān)注和點(diǎn)贊似炎,以及總結(jié)的分類面試題https://github.com/zhendiao/JavaInterview