目標:
先啟動後台管理系統(soul-admin)和閘道器(soul-bootstrap),然後啟動soul-example模組的soul-example-http。
開啟系統,可以看到http模組的介面都被註冊到閘道器中。
直接訪問http服務,不經過閘道器:
經過閘道器**到http服務:
效果完全一樣,實現了閘道器基本的**功能。
修改http服務埠,新起乙個埠為8189的服務,在選擇器增加乙個配置,埠為8189,權重都為50,模擬負載均衡。
從日誌可以看出,請求平均**到兩個http服務,實現了負載均衡的功能。
先開啟waf外掛程式
新增乙個waf選擇器,條件為header存在token=1
新增乙個規則,當header存在token=1時,拒絕訪問,返回403狀態碼
當header中沒有引數時,返回正常
當header中有token=1時,返回403狀態碼
soul
:# soul 針對 springmvc 的配置項,對應 soulhttpconfig 配置類
# soul admin 位址
port
:8188
#你本專案的啟動埠
contextpath
: /http # 設定在 soul 閘道器的路由字首,例如說 /order、/product 等等
full
:false
# 設定true 代表**你的整個服務,false表示**你其中某幾個controller
注意這裡的full欄位,專案啟動時會先根據full欄位判斷註冊所有介面還是部分介面,大概看了一下(後面在仔細研究),乙個spring後置處理器,乙個listener***。
public object postprocessafterinitialization
(@nonnull
final object bean,
@nonnull
final string beanname)
// 如果為full為false,掃瞄註解去註冊介面
}
private
final atomicboolean registered =
newatomicboolean
(false);
public
void
(final contextrefreshedevent contextrefreshedevent)
if(soulspringmvcconfig.
isfull()
)}
通過http請求把介面註冊到閘道器
public
static
void
doregister
(final string json,
final string url,
final rpctypeenum rpctypeenum)
client register success: {} "
, rpctypeenum.
getname()
, json);}
else
client register error: {} "
, rpctypeenum.
getname()
, json);}
}catch
(ioexception e)
, request body: {}"
, url, json, e);}
}
Soul閘道器原始碼學習05
soul web基於webflux 可以使用netty作為應用伺服器,eventloop 可以說是netty的排程中心,負責事件的監聽 i o事件 訊號事件 channelpipeline 事件處理鏈,channelhandler事件處理。相對於channelpipeline 而言netty事件分為...
Soul閘道器原始碼學習06
在soul閘道器中每個請求,都會通過責任鏈的方式執行相匹配的外掛程式,所以外掛程式也是soul閘道器的核心,soul閘道器的外掛程式是可插拔的,並且是外掛程式之間依賴關係是松耦合且外掛程式的功能實現高聚合,其次使用者可根據需求定製外掛程式滿足自己的需求。soul外掛程式配置類,使用 spring.f...
soul閘道器原始碼解析 sofa接入 sofa外掛程式
執行結果 遇到的問題 需要啟動乙個zookeeper 單機就行了 檢查下 soul bootstrap 的pom檔案下是否存在以下配置 com.alipay.sofa sofa rpc all 5.7.6 org.apache.curator curator client 4.0.1 org.apa...