分享一個基於Abp Vnext開發的API閘道器專案

2022-07-22 15:00:33

  這個專案起源於去年公司相要嘗試用微服務構建專案,在閘道器的技術選型中,我們原本確認了ApiSix 閘道器,如果需要寫閘道器外掛需要基於Lua指令碼去寫,我和另外一個同事當時基於這個寫了一個簡單的外掛,但是開發測試以及釋出都很麻煩,而且使用Lua指令碼作為外掛的開發語言本身也不是我們強項。

      後來通過其他渠道瞭解到了微軟出了一個反向代理元件 Yarp,而且也有人基於它去做過一些專案,於是我就決定自己基於它來構建一個簡單的Api閘道器,能夠滿足基礎需求就好.

      專案技術使用:

      開發平臺: .Net 6 + MySql

      開發框架:Abp Vnext 5.3.2

      反向代理元件: Yarp (官方檔案:https://microsoft.github.io/reverse-proxy/index.html)

      後臺管理:Blazor (Bootstrap Blazor UI: https://www.blazor.zone)

   其它元件:Dto對映(Mapster)、紀錄檔元件(Serilog)

     開源地址(GitHub): https://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.節點管理: 閘道器部署節點,後臺管理可以向節點推播設定動態重新整理,可及時生效

  

 

 

 

 

       4.身份認證設定: Jwt校驗設定,支援自定義金鑰以及SSL證書進行token校驗

  

 

 

       5.白名單設定: 閘道器過濾白名單,當請求地址出現在白名單中,則不會進行token校驗

 

 

       6.路由管理: Yarp反向代理元件資訊設定,支援設定路由資訊、叢集資訊、健康檢查資訊、負載均衡策略資訊

  

 

 

  7.中介軟體管理: 設定中介軟體資訊

  

 

 注:更多功能,可以在下載原始碼後本地跑起來實際測試了.

 

下一個專案我將打算構建一個釋出平臺...從設計開始到開發完成使用,都在部落格園釋出文章