Soul閘道器原始碼學習06

2021-10-16 22:40:41 字數 1630 閱讀 9899

在soul閘道器中每個請求,都會通過責任鏈的方式執行相匹配的外掛程式,所以外掛程式也是soul閘道器的核心,soul閘道器的外掛程式是可插拔的,並且是外掛程式之間依賴關係是松耦合且外掛程式的功能實現高聚合,其次使用者可根據需求定製外掛程式滿足自己的需求。

soul外掛程式配置類,使用 spring.factories 載入該配置。

@bean

("webhandler"

)public soulwebhandler soulwebhandler

(final objectprovider

> plugins)

] [{}]"

, soulplugin.

named()

, soulplugin.

getclass()

.getname()

));return

newsoulwebhandler

(soulplugins)

;}

1、objectprovider 使用更寬鬆的方式注入soulplugin。

2、對所有外掛程式進行排序,輸出所有載入的外掛程式。

3、建立soulwebhandler對接,構造方法傳遞所有外掛程式。

所有的外掛程式實現soulplugin類,並過載對應的方法。

//執行外掛程式

mono

execute

(serverwebexchange exchange, soulpluginchain chain)

;//排序

intgetorder()

;//外掛程式名

default string named()

//是否終止

default boolean skip

(serverwebexchange exchange)

//hystrix 外掛程式配置

@bean

public soulplugin hystrixplugin()

//websocket外掛程式配置

@bean

public soulplugin websocketplugin

(websocketclient websocketclient, websocketservice websocketservice)

//dubbo外掛程式

@bean

public soulplugin apachedubboplugin

(objectprovider

dubboparamresolveservice)

執行外掛程式通過責任鏈的方式。

@override

public mono

handle

(@nonnull

final serverwebexchange exchange)

public mono

execute

(final serverwebexchange exchange)

return plugin.

execute

(exchange,

this);

}return mono.

empty()

;});

}

Soul閘道器原始碼學習05

soul web基於webflux 可以使用netty作為應用伺服器,eventloop 可以說是netty的排程中心,負責事件的監聽 i o事件 訊號事件 channelpipeline 事件處理鏈,channelhandler事件處理。相對於channelpipeline 而言netty事件分為...

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...

soul閘道器原始碼學習02 http應用示例執行

目標 先啟動後台管理系統 soul admin 和閘道器 soul bootstrap 然後啟動soul example模組的soul example http。開啟系統,可以看到http模組的介面都被註冊到閘道器中。直接訪問http服務,不經過閘道器 經過閘道器 到http服務 效果完全一樣,實現...