分享一个基于Abp Vnext开发的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)
其它组件: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.节点管理: 网关部署节点,后台管理可以向节点推送配置动态刷新,可及时生效
3.服务治理配置: Consul信息的配置,目前支持Consul做为服务治理中间件
4.身份认证配置: Jwt校验配置,支持自定义密钥以及SSL证书进行token校验
5.白名单配置: 网关过滤白名单,当请求地址出现在白名单中,则不会进行token校验
6.路由管理: Yarp反向代理组件信息配置,支持配置路由信息、集群信息、健康检查信息、负载均衡策略信息
7.中间件管理: 配置中间件信息
注:更多功能,可以在下载源码后本地跑起来实际测试了.
下一个项目我将打算构建一个发布平台...从设计开始到开发完成使用,都在博客园发布文章
分享一个基于Abp Vnext开发的API网关项目的更多相关文章
- 分享一个基于 ABP(.NET 5.0) + vue-element-admin 管理后台
1.前言 分享一个基于ABP(.NET 5.0) + vue-element-admin项目.希望可以降低新手对于ABP框架的学习成本,感兴趣的同学可以下载项目启动运行一下.对于想选型采用ABP框架的 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目
首先,默认咱们已经有了.net core 3.1的开发环境,如果你没有,快去下载... https://dotnet.microsoft.com/download 由于项目是基于abp vNext开发 ...
- Spring Cloud Zuul 2(基于配置中心的动态API网关)
在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(三)
上一篇(https://www.cnblogs.com/meowv/p/12974439.html)完成了全网各大平台的热点新闻数据的抓取,本篇继续围绕抓取完成后的操作做一个提醒.当每次抓取完数据后, ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
随机推荐
- JS 一些概念
JS 内存机制 基本类型: String | Boolean | Undefined | Number | Nll | Symbol 数据保存在"栈"--先进后出. 数据类型: A ...
- Web3.0应用程序架构
Web 3.0 应用程序(或"DApps")的架构与 Web 2.0 应用程序完全不同. 以博客园为例,这是一个简洁的博客网站,用户可以发布自己的内容并可以评论他人的内容进行互动. ...
- Java学习笔记-基础语法Ⅹ-进程线程
学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...
- 深入HTTP请求流程
1.HTTP协议介绍 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,它是从WEB服务器传输超文本标记语言(HTML)到 ...
- 使用RoslynSyntaxTool工具互相转换C#代码与语法树代码
项目地址 MatoApps/RoslynSyntaxTool: 此工具能将C#代码,转换成使用语法工厂构造器(SyntaxFactory)生成等效语法树代码 (github.com) 基础概念 S ...
- 渗透:wesside-ng
WEP自动破解工具wesside-ng wesside-ng是aircrack-ng套件提供的一个概念验证工具.该工具可以自动扫描无线网络,发现WEP加密的AP.然后,尝试关联该AP.关联成功后,它会 ...
- 104_Power Query 数据库条件查询
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载 1.应用场景 底层数据在数据库(sql server数据库,其他数据库同理,下文不再说明.)中,Excel中有查询的字段,需要 ...
- 跨域问题及其解决方法(JSONP&CORS)
一.什么是跨域 当a.qq.com域名下的页⾯或脚本试图去请求b.qq.com域名下的资源时,就是典型的跨域行为.跨域的定义从受限范围可以分为两种,⼴义跨域和狭义跨域. (一)广义跨域 ⼴义跨域通常包 ...
- Unity-自定义事件派发器的两次尝试
一.前言: 在游戏开发的很多时候,需要引用其他类的方法,但是一旦类多起来了,相互引用会导致引用关系混乱,极其难以阅读. 以前初次做抖音小游戏时,和一位经验老道的cocos程序员合作,看到我写的代码他不 ...
- Java开发学习(一)----初识Spring及其核心概念
一. Spring系统架构 1.1 系统架构图 Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基. Spring Framework的发展也经历了很多版本的变更,每 ...