分享一個基于Abp 和Yarp 開發的API網關項目

 這個項目起源于去年公司相要嘗試用微服務構建項目,在網關的技術選型中,我們原本確認了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

?????注: 這篇文章會很少展示代碼實現本身

 ??一. 項目結構圖(以及層依賴說明):

?????712d86d57aff8f8f4ff33016ab7193db.png

  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實現

  二.網關執行流程介紹(含圖):

  ce1958dbf8f6ea56a3da79dceec92e3d.png

?????? 網關中間件說明,上一個版本的設計是利用Abp自帶插件機制去實現,但是這一版我去掉了這種設計模式.為什么取消插件設計模式,就是感覺這樣網關會導致具體業務關聯太深,新版的我采用網關根據配置的中間件信息去向業務服務發起Http請求或者Grpc(暫未實現)的方式實現,這樣減少業務對網關系統的依賴,以及網關對具體業務的深層依賴。

???????三.后臺管理介紹(會出現比較多的效果圖):

  af82d5206b2ad543de36c111620ef780.png

?????? 1.賬號管理: 登錄后臺管理的賬號管理(如果全新安裝會可以使用 admin/admin 進行登錄)

  ebe78394a50cc0eb3a90bad0d9d0c2b4.png

?????? 2.節點管理: 網關部署節點,后臺管理可以向節點推送配置動態刷新,可及時生效

  f7428c1c5400c5cf0c68533097fa0f12.png

?818bd395a7f008d441a84d8529770579.png  

?????? 3.服務治理配置: Consul信息的配置,目前支持Consul做為服務治理中間件

  1f0bd55e4574fce2377c1d0e0e36300e.png

?????? 4.身份認證配置: Jwt校驗配置,支持自定義密鑰以及SSL證書進行token校驗

  af0a8f5670cf05a6b2fd66513bb5b067.png

?????? 5.白名單配置: 網關過濾白名單,當請求地址出現在白名單中,則不會進行token校驗

deda3878f7487d7674182fb3ac3f6b5f.png

?????? 6.路由管理: Yarp反向代理組件信息配置,支持配置路由信息、集群信息、健康檢查信息、負載均衡策略信息

  b7e135f2c81b6076e75efda3d5146577.png

  7.中間件管理: 配置中間件信息

  85b0766a659afbddb232086f0b4e4f46.png

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284522.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

羅振宇2022“時間的朋友”跨年演講全文稿(pdf)

2021年12月31日20:30,五糧液成都金融城演藝中心,羅振宇“時間的朋友”跨年演講如約而至。 羅胖曾發下大愿望:跨年演講要連辦二十年。今年是第七場,也是最特殊的一場,羅胖面對12000個空座位,用53個好故事&am…

08.LoT.UI 前后臺通用框架分解系列之——多樣的Tag選擇器

LOT.UI分解系列匯總:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI開源地址如下:https://github.com/dunitian/LoTCodeBase/tree/master/LoTUI 這個必須說下,本來是用Bootstrap-Select做的,很漂亮,正好…

jquery文檔加載完畢后執行的幾種寫法

2019獨角獸企業重金招聘Python工程師標準>>> 1.js文檔加載完畢 標簽內 οnlοad"test()"window.οnlοadfunction(){}2.jquery文檔加載完畢 //方式1 $(document).ready(function(){//TODO }); //方式2 $(function(){//TODO }) //方式3 $(function($){//TO…

新型基礎測繪與實景三維中國建設技術文件【3】基礎地理實體空間身份編碼規則

基礎地理實體是新型基礎測繪產品體系中的核心成果,是推動基礎測繪工作轉型升級的關鍵。與現有的測繪地理信息數據不同,基礎地理實體具有多粒度、多模態、多層次,以及搭載結構化、半結構化和非結構化多樣化信息的鮮明特點。 基礎地理實體空間…

oracle 表 視圖 存儲過程 序列 job

table 表--delete tabledrop table Test1;-- Create tablecreate table TEST1(ID NUMBER,T_NAME VARCHAR2(100),DT DATE);-- 添加注釋comment on column TEST1.T_NAME is 名稱;--添加age字段alter table Test1 add (age NUMBER(8));--刪除字段alter table TABLE_NAME …

[轉]Docker 大勢已去,Podman 即將崛起

Podman Podman 什么是Podman?Podman和Docker的主要區別是什么?Podman的使用與docker有什么區別?Podman 常用命令 容器鏡像部署 PodmanPodman 加速器使用 Podman 運行一個容器列出運行的容器檢查正在運行的容器查看一個運行中容器的日志查看一…

基于Kubernetes v1.24.0的集群搭建(一)

一、寫在前面 K8S 1.24作為一個很重要的版本更新,它為我們提供了很多重要功能。該版本涉及46項增強功能:其中14項已升級為穩定版,15項進入beta階段,13項則剛剛進入alpha階段。此外,另有2項功能被棄用、2項功能被刪除。…

mvc設計模式和mvc框架的區別

一組概念需要先理解,因為后面需要用: 架構:簡單的說架構就是一個藍圖,是一種設計方案,將客戶的不同需求抽象成為抽象組件,并且能夠描述這些抽象組件之間的通信和調用。 框架:軟件框架是項目軟件…

新型基礎測繪與實景三維中國建設技術文件【4】基礎地理實體數據元數據

基礎地理實體數據是新型基礎測繪產品體系中的核心成果,為實現該數據的規范化管理和使用,編制基礎地理實體數據元數據技術文件。本文件規定了基礎地理實體數據元數據的基本要求和元數據內容,適用于二維表達形式、三維表達形式基礎地理實體數據…

思科三層交換機充當路由器實現全網互通

轉載于:https://blog.51cto.com/13568840/2059797

劍指offer編程題Java實現——面試題3二維數組中的查找

題目描述 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。下面是我實現的代碼,修改下類名(…

mpvue開發小程序分享朋友圈無法自定義標題解決方法

在node_modules里面找到mpvue,手動修改一下mpvue這個包下的index.js文件 // 用戶點擊右上角分享 到朋友圈 onShareTimeline: rootVueVM.$options.onShareTimeline? function (options) { return callHook$1(rootVueVM, onShareTimeline, options); } : null,找到 L…

【ArcGIS Pro微課1000例】0020:ArcGIS Pro中河流(曲線)、湖泊(水體色)圖例制作案例教程

相關閱讀:【ArcGIS微課1000例】0032:ArcGIS中河流(曲線)、湖泊(水體色)圖例制作案例教程 河流、湖泊的樣式設置功能在ArcGIS Pro得到了延續,本文講解ArcGIS Pro中河流湖泊圖例的設置方法。 《ArcGIS Pro從入門到精通系列精品教程(微課版)》專欄包括完整的實驗數據包,…

swift學習選pizza項目

2019獨角獸企業重金招聘Python工程師標準>>> 原文: https://makeapppie.com/2014/09/18/swift-swift-implementing-picker-views/ 效果: 步驟: 新建iOS single view application 名字為SwiftPickerViewPizzaDemo, 打開main storyboard選中view controoler, 右上角, …

Windows 11 新版 25163 推送!任務欄全新菜單、應用商店更新、文件資源管理器大量修復...

面向 Dev 頻道的 Windows 預覽體驗成員,微軟現已推送 Windows 11 預覽版 Build 25163。主要變化1.微軟宣布為 Windows 11 任務欄引入全新溢出體驗,當任務欄上的應用程序圖標或窗口達到任務欄容量上限時,將啟用全新溢出菜單。2.微軟更新了 Mic…

shell中source與sh區別

shell中使用source conf.sh,是直接運行conf.sh的命令,不創建子shell,類似與html中include,而sh是則創建子shell,子shell里面 的變量父shell無法使用,對環境變量的修改也不影響父shell。父shell中的局部變量…

[轉]Web3 是去中心化的“騙局”?

作者 | InvisibleUp 譯者 | 彎月 出品 | CSDN(ID:CSDNnews) Web3 不是去中心化。 雖然我覺得這一點很明顯,根本不需要通過一篇文章來說明,但我也是迫不得已,因為突然之間各大科技巨頭,比如 Redd…

實景三維建設背景下,三維GIS面臨哪些挑戰?

2021年8月26日,自然資源部印發《實景三維中國建設技術大綱(2021版)》,明確指出“實景三維中國建設是落實數字中國、平安中國、數字經濟戰略的重要舉措,是落實國家新型基礎設施建設的具體部署,是服務生態文明…

無需編碼,自動實現“異步 Request-Reply”模式

前言上次,我們雖然用代碼實現了“異步 Request-Reply 模式”,但是需要為每一個長時間操作 API 實現一個對應的 AsyncXXX 操作。其實,可以嘗試用 Source Generators 減少這種重復性勞動。實現思路Controller 類必須是partial,這樣才能為它額外…

Kotlin Weekly 中文周報

Kotlin Weekly 中文周報 —— 25 Kotlin 開發中文周報 文章 使用 Kotlin 中的 takeIf (zhuanlan.zhihu.com) 在 Kotlin 的標準函數中有個 takeIf 函數,你是否了解這個函數呢?它是否只是漂亮點的 if 語句呢? Kotlin 的…