論起微服務,哪能不談網關,老將有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接入。
全文完!
微信公眾號,歡迎各位進行留言交流。
推薦閱讀:
- 1 Docker部署RocketMQ
- 2 流式計算(五)-Flink 計算模型
- 3 流式計算(四)-Flink Stream API 篇二
- 4 流式計算(三)-Flink Stream 篇一
- 5 流式計算(二)-Kafka Stream