这个项目起源于去年公司相要尝试用微服务构建项目,在网关的技术选型中,我们原本确认了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网关项目的更多相关文章

  1. 分享一个基于 ABP(.NET 5.0) + vue-element-admin 管理后台

    1.前言 分享一个基于ABP(.NET 5.0) + vue-element-admin项目.希望可以降低新手对于ABP框架的学习成本,感兴趣的同学可以下载项目启动运行一下.对于想选型采用ABP框架的 ...

  2. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目

    首先,默认咱们已经有了.net core 3.1的开发环境,如果你没有,快去下载... https://dotnet.microsoft.com/download 由于项目是基于abp vNext开发 ...

  3. Spring Cloud Zuul 2(基于配置中心的动态API网关)

    在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(三)

    上一篇(https://www.cnblogs.com/meowv/p/12974439.html)完成了全网各大平台的热点新闻数据的抓取,本篇继续围绕抓取完成后的操作做一个提醒.当每次抓取完数据后, ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

随机推荐

  1. 超全!华为交换机端口vlan详解~

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 华为交换机和其他品牌的交换机在端口的vlan划分上有一些区别,今天就和大家详细说说华为交换机的 ...

  2. php魔术方法小结

    php魔术方法 __construct() __construct(mixed ...$values = ""): void PHP 允许开发者在一个类中定义一个方法作为构造函数. ...

  3. zabbix的web界面访问失败问题排查

    现象:用curl访问显示拒绝链接,查看zabbix-server日志也无异常 1.检查防火墙,SElinux是否关闭 2.检查zabbix-server服务是否启动 3.检查80端口是否被占用,比方是 ...

  4. 详解CVE-2022-0847 DirtyPipe漏洞

    摘要:本文详细介绍了CVE-2022-0847漏洞形成根因,相应补丁修复方法,通过本文让读者对CVE-2022-0847漏洞有更清晰的了解. 本文分享自华为云社区<CVE-2022-0847 D ...

  5. 好客租房29-从jsx中抽离事件处理程序

    从jsx中抽离过多js逻辑代码 会显得非常混乱 推荐:将逻辑抽离到单独的方法中 保证jsx结构清晰 //导入react     import React from 'react'           ...

  6. Ajax——Get请求

    Get.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. python之名称空间与函数对象

    目录 名称空间 内置名称空间 全局名称空间 局部名称空间 名称的查找顺序 作用域 global关键字 nonlocal关键字 函数名的多种用法 函数的嵌套 名称空间 名称空间就是变量名与变量值绑定关系 ...

  8. 「JOISC 2020 Day1」汉堡肉

    我终于学会打开机房的LOJ了! description LOJ3272 有\(n(n<=2*10^5)\)个矩形,让你找\(k(k<=4)\)个点可以覆盖所有矩形(点可重复),输出一种方案 ...

  9. Unicode和中午互转

    import java.io.UnsupportedEncodingException; public class TestUnicode{ /* * 中文转unicode编码 */ public s ...

  10. React BrowserHistory 踩坑实录 布置到服务器Nginx上各种静态文件、二级地址404

    由于BrowserHistory访问的是文件真实地址不仅需要前端配置package.json还需要运维端配置一下网站Nginx设置环境: "react": "^17.0. ...