Dubbo學習系列之十七(微服務Soul網關)


 

論起微服務,哪能不談網關,老將有Zuul,后繼有Gateway,但這些都和SpringCloud關系密切,其他網關如Kong,因Lua原因,玩起來略不順手。

這不,就來了個Soul,我順便拿來整進了我在寫的項目中,感覺還行,也發現了些問題,表現有待觀察,另一方面發現Soul資料略少,

官方教程也不是很清晰,我就出點實戰樣例供看官參考參考。

 

作者原創文章,謝絕一切轉載!違者必究!

 本文只發表在"公眾號"和"博客園",其他均屬復制粘貼!如果覺得排版不清晰,請查看公眾號文章。 

 

准備:

Idea2019.03/Gradle6.0.1/JDK11.0.4/Lombok0.28/SpringBoot2.2.2RELEASE/mybatisPlus3.3.0/Sou2.1.2/Dubbo2.7.5/Mysql8.0.11

難度: 新手--戰士--老兵--大師

目標:

1.實現http模式下使用soul網關轉發

2.使用soul網關多服務實例負載均衡

步驟:

為了遇見各種問題,同時保持時效性,我盡量使用最新的軟件版本。代碼地址:https://github.com/xiexiaobiao/vehicle-shop-admin

1 Soul 網關特點

  • 插件式管理,動態熱加載
  • 獨立式部署,帶web管理界面
  • 可對接HTTP,Restful,websocket,dubbo和springcloud

2 http模式使用

2.1 項目中加入依賴:dubbo接入使用soul-client-apache-dubbo包,http接入使用:soul-client-springmvc包。

2.2 定義配置:

重點就是“contextPath”,即這個插件匹配到uri路徑為 “ /stock/** ”

 

2.3 在Controller的方法上使用@SoulClient注解,比如:

@SoulClient(path = "/vehicle/stock/brand/list", desc = "獲取所有品牌列表")

此處因為我整個項目加了context-path: /vehicle,故有/vehicle前綴:

 

使用http接入需要使用zk,否則控制台會報錯,但經測試不使用zk功能上也可以,官方也說明已脫離對zk強依賴,應該是歷史遺留問題。

2.4 先啟動zookeeper(非必需),再啟動soul-admin.jar,再啟動soul-bootstrap.jar(這兩個可以官網下載,依照說明使用),最后啟動項目。

結構關系如下:

 

 2.5 使用http接入為例,啟動完畢后訪問 http://localhost:9095/index.html 

默認的用戶名:admin 密碼:123456,發現已自動加入了定義的“選擇器”和“選擇器規則”:

 

選擇器詳細:

“http配置”可以有多個目標地址,即多個微服務實例,再配合選擇器規則即可做負載均衡。

“權重”越大,random模式下分配到的概率越大。本機的話ip也可以直接用127.0.0.1

“條件”推薦使用uri模式匹配,這也是網關核心之一的路由功能了!

 

 

選擇器規則詳細:

這里可以配置負載均衡策略,三種:hash、random和robin。

 

 

2.6 並先關閉其他插件,只保留divide:

 

2.7 測試:

直接http訪問項目API:

 

 使用soul網關訪問,注意對比url地址。注意這里是soulClient的端口,不是soulAdmin的!!

 

同時可以看到soul-bootstrap控制台進行http路由轉發的信息:

 

總結

1.使用發現對RESTFUL支持只有GET/POST,其他如PUT/DELETE,總是導致攜帶的參數丟失,無法轉發到目標地址,可能設計上就只支持GET/POST。

2.Soul熱插件和web端操作,還是體驗較好的,我使用的項目代碼較多,看官完全可以自己寫一個簡單的SpringbootMVC項目來測試。

3.請期待我的后續:集群部署和Dubbo接入。

 

全文完!

 

微信公眾號,歡迎各位進行留言交流。


推薦閱讀:

 


免責聲明!

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



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