ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

分享一个基于Abp Vnext开发的API网关项目

2022-07-22 12:36:40  阅读:151  来源: 互联网

标签:Vnext 网关 Kite 配置 中间件 插件 Abp Gateway


  这个项目起源于去年公司相要尝试用微服务构建项目,在网关的技术选型中,我们原本确认了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.中间件管理: 配置中间件信息

  

 

 注:更多功能,可以在下载源码后本地跑起来实际测试了.

 

下一个项目我将打算构建一个发布平台...从设计开始到开发完成使用,都在博客园发布文章

 

   

 

 

     

   

    

标签:Vnext,网关,Kite,配置,中间件,插件,Abp,Gateway
来源: https://www.cnblogs.com/yupingyong/p/16505300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有