springcloud ,divide 外掛程式跑通後,今天再 debug下 詳細的流程。
這裡可以看到 springcloud 外掛程式,divide 外掛程式都是在 webclientplugin 外掛程式之後執行的。
首先來看下外掛程式的繼承結構,soulplugin 介面定義了這幾個方法,而每個外掛程式具體的類都實現了這幾個方法。
abstractsoulplugin 實現的 execute 方法
public mono
execute
(final serverwebexchange exchange,
final soulpluginchain chain)
//找到匹配的選擇器
final selectordata selectordata =
matchselector
(exchange, selectors);if
(objects.
isnull
(selectordata)
)selectorlog
(selectordata, pluginname)
;//記憶體中獲取規則
final list
rules = basedatacache.
getinstance()
.obtainruledata
(selectordata.
getid()
);if(collectionutils.
isempty
(rules)
) ruledata rule;
//匹配rule
if(selectordata.
gettype()
== selectortypeenum.full_flow.
getcode()
)else
if(objects.
isnull
(rule)
)rulelog
(rule, pluginname)
;//這裡就是去具體的外掛程式裡面呼叫
return
doexecute
(exchange, chain, selectordata, rule);}
return chain.
execute
(exchange)
;}
doexecute(exchange, chain, selectordata, rule) 就是去對應外掛程式執行它的 doexecute,這裡看下 divide 外掛程式的 doexecute 方法。
protected mono
doexecute
(final serverwebexchange exchange,
final soulpluginchain chain,
final selectordata selector,
final ruledata rule)
", rule.
tostring()
);object error = soulresultwrap.
error
(soulresultenum.cannot_find_url.
getcode()
, soulresultenum.cannot_find_url.
getmsg()
, null)
;return webfluxresultutils.
result
(exchange, error);}
final string ip = objects.
requirenonnull
(exchange.
getrequest()
.getremoteaddress()
).getaddress()
.gethostaddress()
;//這裡去找一條鏈結出來,配置了負載均衡的話,也是這裡處理
divideupstream divideupstream = loadbalanceutils.
selector
(upstreamlist, rulehandle.
getloadbalance()
, ip);if
(objects.
isnull
(divideupstream)
)// 構建 http url
;// 把 timeout,url 設定在 exchange,傳遞給下乙個外掛程式
;}
divide外掛程式執行完後,會把 exchange 轉給 下一外掛程式,就這麼一步步往下執行,直到最後乙個外掛程式 webclientresponseplugin 處理返回資料。 soul原始碼閱讀(十)soul所有外掛程式介紹續
目錄 hystrix外掛程式 sentinel外掛程式 resilience4j外掛程式 monitor外掛程式 waf外掛程式 sign外掛程式 rewrite外掛程式 global外掛程式 webclient外掛程式 webclientresponse外掛程式 tars外掛程式 總結 上篇已介紹...
Soul 學習筆記 使用 waf 外掛程式(十九)
登入 soul admin,開啟 waf 外掛程式。官網上的這兩句很重要,waf 外掛程式原始碼的實現也是根據這兩句話來的。一開始我選的 black 模式,配置如下。接下來看下原始碼是怎麼實現的。waf 外掛程式是前置外掛程式,也就是在請求真正 url 之前進行的,在外掛程式鏈上第三個執行的。執行 ...
soul閘道器學習sofa 外掛程式體驗(下)
首先回憶下程式沒有進入sofaplugin的可能原因 外掛程式狀態沒有開啟直接沒有執行直接 首先確認了狀態已經開啟,debug發現我的外掛程式鏈裡面並沒有sofa外掛程式 懷疑沒有初始化sofaplugin 再次看了波官網檢查了下閘道器日誌 發先輸出日誌裡面sofa外掛程式沒有被載入 找到原因 在閘...