關(guān)于 Soul API 網(wǎng)關(guān)項(xiàng)目
Soul 網(wǎng)關(guān)項(xiàng)目是由一群優(yōu)秀的國(guó)內(nèi)開(kāi)發(fā)者發(fā)起的一個(gè)異步的、高性能的、響應(yīng)式的開(kāi)源網(wǎng)關(guān)項(xiàng)目。除了性能高之外,我認(rèn)為插件話的設(shè)計(jì)思想是 Soul
最重要的特點(diǎn),這讓 Soul
變得更靈活。
Soul 核心架構(gòu)圖如下:
本節(jié)關(guān)注的內(nèi)容是 soul 的源碼編譯和入門(mén)使用,所以這里只是簡(jiǎn)單展示 soul 的核心架構(gòu)圖,希望讀者能有個(gè)直觀的感受,暫不對(duì)其進(jìn)行深入討論。
編譯 soul 源碼并啟動(dòng)一個(gè)單機(jī)網(wǎng)關(guān)
1、獲取源碼
git clone https://github.com/yiwenlong/soul.git
因?yàn)橐獙?duì) Soul 項(xiàng)目做貢獻(xiàn),所以我已經(jīng)把 Soul 項(xiàng)目源碼 fork 到我自己的 Github,這里我是從我的個(gè)人 Github 檢出的代碼。
2、編譯打包
./mvnw clean package -Dmaven.javadoc.skip=true
我這里的默認(rèn)打包命令只是選擇跳過(guò)了 javadoc 的生成,如果想要更快速的執(zhí)行打包命令,可以在參數(shù)后面添加
-Dmaven.test.skip=true
參數(shù)。
這一步完成后,在 soul-admin/target
和 soul-bootstrap/target
下會(huì)分別生成 soul-admin.jar
和 soul-bootstrap.jar
兩個(gè)可執(zhí)行的 jar 包。這兩個(gè)可執(zhí)行 jar 包分別對(duì)應(yīng)架構(gòu)圖中的管理控制臺(tái)和 API 網(wǎng)關(guān)部分。
3、啟動(dòng) soul-admin
啟動(dòng) soul-admin 前需要確認(rèn) Mysql 數(shù)據(jù)庫(kù)是否已經(jīng)安裝啟動(dòng),并使用自己本地環(huán)境的 Mysql 數(shù)據(jù)庫(kù)的用戶明和密碼替換到下面命令中。
java -jar ./soul-admin/target/soul-admin.jar \
--spring.datasource.password='root' \
--spring.datasource.password='12345'
這里的配置同樣可以在源碼 soul-admin 模塊的 application.yaml 中設(shè)置。
啟動(dòng)成功后,我們可以訪問(wèn) http://localhost:9095
,使用用戶名密碼 admin/123456
登陸到剛剛啟動(dòng)的管理控制臺(tái)服務(wù)。
4、啟動(dòng) API 網(wǎng)關(guān)
java -jar ./soul-bootstrap/target/soul-bootstrap.jar
API 網(wǎng)關(guān)啟動(dòng)成功后,我們?cè)诰W(wǎng)關(guān)的日志中可以看到如下一條日志,說(shuō)明網(wǎng)關(guān)和管理控制臺(tái)已經(jīng)建立了 websocket 長(zhǎng)鏈接。
2021-01-15 00:29:11.434 INFO 16453 --- [ocket-connect-1] o.d.s.p.s.d.w.WebsocketSyncDataService : websocket reconnect is successful.....
我們同樣可以在管理控制臺(tái)的日志中看到如下成功的日志:
2021-01-15 02:43:11.365 INFO 17565 --- [0.0-9095-exec-1] o.d.s.a.l.websocket.WebsocketCollector : websocket on open successful....
簡(jiǎn)單使用下 soul 網(wǎng)關(guān)
1、轉(zhuǎn)發(fā)需求
在使用之前,我在本地簡(jiǎn)單啟動(dòng)了一個(gè) Nginx
服務(wù),我希望能通過(guò) Soul
網(wǎng)關(guān)訪問(wèn)到我的 Nginx
服務(wù)(http://localhost:8080)。
2、配置 Selector 和 Rule
登陸到管理控制臺(tái),選擇 PluginList
下的 divide
,點(diǎn)擊 Selector
后的 Add
添加如下配置:
點(diǎn)擊
RulesList
后的 Add
添加如下配置:Selector 和 Rule 是 Soul 網(wǎng)關(guān)中的兩個(gè)核心的概念,后面我們會(huì)重點(diǎn)討論并搞清楚它們。
3、訪問(wèn)一下
Soul
API 網(wǎng)關(guān)的默認(rèn)端口是 9195,所以這里我們應(yīng)該訪問(wèn) http://localhost:9195/baidu 會(huì)看到 nginx 的默認(rèn)界面。
參考連接
- Soul 項(xiàng)目 Github 主頁(yè):https://github.com/dromara/soul
- Soul 項(xiàng)目中文官方文檔:https://dromara.org/zh-cn/docs/soul/soul.html