Soul(shenyu)網關-插件鏈


 Soul(shenyu)網關很大的一個特色便是插件化思想,soul網關支持很多個插件,這些插件按照給定的順序依次執行。

Soul所有的插件都實現SoulPlugin接口,插件鏈,也是執行一個個的SoulPlugin的實現類

插件鏈的執行在SoulWebHandler當中,進行代碼分析

 

SoulConfiguration

初始化了SoulWebHandler,將所有plugin按照order排序,調用SoulWebHandler的構造器

 

SoulWebHandler

構造器


初始化插件集合,工作線程池

handle方法


攔截所有請求,請求都會進入handle方法,調用了靜態內部類DefaultSoulPluginChain中的方法

 

DefaultSoulPluginChain

請求進來會執行DefaultSoulPluginChain的execute方法,請求上下文為參數,

方法中設置游標index,大小為插件的個數,每次執行方法后,游標加一,並且可以判斷是否跳過插件。

execute是一個遞歸方法,在進入plugin.execute方法之后,傳入了當前DefaultSoulPluginChain對象

例如,進入divide插件中:


如果不符合條件,則返回其他內容,如果符合條件,繼續調用chain.execute方法

假設divide插件為第一個插件,在進入這個插件之后,如果不滿足條件,返回其他內容,則execute方法直接的到結果返回,否則,在divide插件中調用execute方法,此時index為0++之后的結果,即1,那么就獲取到了下一個插件,一直遞歸下去,知道沒有執行execute或者index等於plugins.size為止。

 

遞歸滿足的是不斷調用自身,且含有終點條件,execute方法是可以一直使用DefaultSoulPluginChain對象,一直調用execute方法下去,而終點條件便是index或者某個插件直接返回了內容。

 

soul的插件鏈,使用SoulWebHandler實現WebHandler,攔截所有到達soulbootstrap的請求,並遞歸執行DefaultSoulPluginChain的execute方法,知道達到終點條件為止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM