分享一個基於Abp Vnext開發的API網關項目
- 2022 年 7 月 22 日
- 筆記
- Abp Vnext項目實踐開發系列
這個項目起源於去年公司相要嘗試用微服務構建項目,在網關的技術選型中,我們原本確認了ApiSix 網關,如果需要寫網關插件需要基於Lua腳本去寫,我和另外一個同事當時基於這個寫了一個簡單的插件,但是開發測試以及發布都很麻煩,而且使用Lua腳本作為插件的開發語言本身也不是我們強項。
後來通過其他渠道了解到了微軟出了一個反向代理組件 Yarp,而且也有人基於它去做過一些項目,於是我就決定自己基於它來構建一個簡單的Api網關,能夠滿足基礎需求就好.
項目技術使用:
開發平台: .Net 6 + MySql
開發框架:Abp Vnext 5.3.2
反向代理組件: Yarp (官方文檔://microsoft.github.io/reverse-proxy/index.html)
後台管理:Blazor (Bootstrap Blazor UI)
其它組件:Dto映射(Mapster)、日誌組件(Serilog)
開源地址(GitHub): //github.com/yupingyong/kite.gateway
注: 這篇文章會很少展示程式碼實現本身
一. 項目結構圖(以及層依賴說明):
Kite.Gateway.Admin : 後台管理項目,實現對網關服務節點的管理以及網關配置數據的管理,支援像多個節點同步刷新配置數據
Kite.Gateway.Hosting : 網關啟動項目,定義了網關過濾器以及中間件
Kite.Gateway.Application : 應用服務層,組合業務邏輯層業務,提交資料庫保存
Kite.Gateway.Application.Contracts : 應用服務公共合約層,定義應用服務層介面,DTO對象
Kite.Gateway.Domain: 領域服務層,業務邏輯處理核心層
Kite.Gateway.Domain.Shared : 領域服務共享層,定義公共的枚舉,通用工具類等
Kite.Gateway.EntityFrameworkCore : 倉儲實現層,依賴於領域服務,基於EF Core實現
二.網關執行流程介紹(含圖):
網關中間件說明,上一個版本的設計是利用Abp自帶插件機制去實現,但是這一版我去掉了這種設計模式.為什麼取消插件設計模式,就是感覺這樣網關會導致具體業務關聯太深,新版的我採用網關根據配置的中間件資訊去向業務服務發起Http請求或者Grpc(暫未實現)的方式實現,這樣減少業務對網關係統的依賴,以及網關對具體業務的深層依賴。
三.後台管理介紹(會出現比較多的效果圖):
1.帳號管理: 登錄後台管理的帳號管理(如果全新安裝會可以使用 admin/admin 進行登錄)
2.節點管理: 網關部署節點,後台管理可以向節點推送配置動態刷新,可及時生效
3.服務治理配置: Consul資訊的配置,目前支援Consul做為服務治理中間件
4.身份認證配置: Jwt校驗配置,支援自定義密鑰以及SSL證書進行token校驗
5.白名單配置: 網關過濾白名單,當請求地址出現在白名單中,則不會進行token校驗
6.路由管理: Yarp反向代理組件資訊配置,支援配置路由資訊、集群資訊、健康檢查資訊、負載均衡策略資訊
7.中間件管理: 配置中間件資訊
注:更多功能,可以在下載源碼後本地跑起來實際測試了.
下一個項目我將打算構建一個發布平台…從設計開始到開發完成使用,都在部落格園發布文章