論起微服務,哪能不談網關,老將有Zuul,後繼有Gateway,但這些都和SpringCloud關係密切,其餘網關如Kong,因Lua緣由,玩起來略不順手。html
這不,就來了個Soul,我順便拿來整進了我在寫的項目中,感受還行,也發現了些問題,表現有待觀察,另外一方面發現Soul資料略少,git
官方教程也不是很清晰,我就出點實戰樣例供看官參考參考。github
準備:web
Idea2019.03/Gradle6.0.1/JDK11.0.4/Lombok0.28/SpringBoot2.2.2RELEASE/mybatisPlus3.3.0/Sou2.1.2/Dubbo2.7.5/Mysql8.0.11spring
難度: 新手--戰士--老兵--大師sql
目標:apache
1.實現http模式下使用soul網關轉發bootstrap
2.使用soul網關多服務實例負載均衡微信
步驟:websocket
爲了碰見各類問題,同時保持時效性,我儘可能使用最新的軟件版本。代碼地址: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
原文出處:https://www.cnblogs.com/xxbiao/p/12306379.html