分享一个基于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.mzph.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项功能被删除。…

思科三层交换机充当路由器实现全网互通

转载于:https://blog.51cto.com/13568840/2059797

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…

[转]Web3 是去中心化的“骗局”?

作者 | InvisibleUp 译者 | 弯月 出品 | CSDN(ID:CSDNnews) Web3 不是去中心化。 虽然我觉得这一点很明显,根本不需要通过一篇文章来说明,但我也是迫不得已,因为突然之间各大科技巨头,比如 Redd…

实景三维建设背景下,三维GIS面临哪些挑战?

2021年8月26日,自然资源部印发《实景三维中国建设技术大纲(2021版)》,明确指出“实景三维中国建设是落实数字中国、平安中国、数字经济战略的重要举措,是落实国家新型基础设施建设的具体部署,是服务生态文明…

第一次玩,试试手(标题)

Hello Blog!!转载于:https://blog.51cto.com/10999994/1786094

【CASS精品教程】CASS9.1生成标准图幅案例教程

在CASS中,可以很方便的生成标准图幅,如50*50。本文演示cass中,根据测区范围标准图幅生成过程。 一、图幅预览: 二、图幅生成 打开测区范围,如下图所示: 点击【绘图处理】→【批量分幅】→【格网建立】,如下图所示: 选择比例尺500,直接回车。 选择图幅50*50。 根据测区…

分布式日志收集系统 - ExceptionLess的安装、配置、使用

前言Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技术开发的应用程序中,并且提供了REST接…

[转]使用npm发布vue组件

😶 NPM 是随同 NodeJS 一起安装的 javascript 包管理工具,能解决 NodeJS 代码部署上的很多问题 发布前的准备 注册一个 npm 账号 前往 NPM 官网进行注册 初始化项目 这里用的是webpack-simple,可以理解为精简版的vue-cli。 如果没有全局安装 vue 的话&am…

[置顶]tcpflow 抓包

转自: http://www.rwifeng.com/jekyll/update/2015/04/16/how-to-tcpflow/ tcpflow 抓包 Apr 16, 2015 大家都知道 tcpdump 是一个很方便的抓包工具, 但是 tcpdump 是以包为单位进行输出的,阅读起来不是很方便。 而 tcpflow 是面向 TCP 流的…

【CASS精品教程】CASS自动插入DOM影像(附插件下载)

本文讲解在CASS中快速自动插入栅格数据(影像、DOM、DEM)等,支持tif、img等格式。 文章目录 一、效果预览二、插件安装三、插件下载一、效果预览 二、插件安装 打开CASS9.1软件,输入命令appload,回车。 选择插入影像插件,点击【加载】。 输入命令aimg,回车,可以进行影像…