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

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 的…