Yarp是微软开源的一个用.net实现的反向代理工具包,github库就叫reverse-proxy(反向代理)(吐槽一下微软起名字233333)

nuget包preview9之前都叫Microsoft.ReverseProxy,preview10变成Yarp.ReverseProxy了

放上链接https://github.com/microsoft/reverse-proxy

使用背景

由于公司技术历史原因,原来的网关规则是{paramA}_ {paramB} _ {paramC}_{paramD}这样子的。

想要换个新网关,又要兼容旧的这种规则,调研过目前几种API网关发现,apiSix支持这种操作(用$1占位符匹配参数)。

但是目前暂时不需要功能那么强大的api网关,而且不是.net技术实现的,出问题不好排查。

这是刚好发现Yarp这个东东,刚刚好符合需求,就拿来试试。

怎么用Yarp

Yarp主要要配置的东西就是Cluster(集群)和ProxyRoute(路由)

最简单的用法直接使用appsettings.json配置集群和路由配置

下面内容照搬Yarp 的Getting Started内容

详细的配置项可以直接看文档~~

"ReverseProxy": {
"Routes": [
{
"RouteId": "route1",
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}"
},
}
],
"Clusters": {
"cluster1": {
"Destinations": {
"cluster1/destination1": {
"Address": "https://example.com/"
}
}
}
}
}

需要在startup.cs中配置Yarp

public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
Configuration = configuration;
} public void ConfigureServices(IServiceCollection services)
{
// Add the reverse proxy to capability to the server
var proxyBuilder = services.AddReverseProxy();
// Initialize the reverse proxy from the "ReverseProxy" section of configuration
proxyBuilder.LoadFromConfig(Configuration.GetSection("ReverseProxy"));
} public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} // Enable endpoint routing, required for the reverse proxy
app.UseRouting();
// Register the reverse proxy routes
app.UseEndpoints(endpoints =>
{
endpoints.MapReverseProxy();
});
}

改造一下用法,使用持久化储存配置

第一步,翻源码,找到配置的实体对象,照搬微调一遍,大概就是下图那么多个了。

第二步,实现IProxyConfigProvider和IProxyConfig,基本都是照搬原本代码微整形一下233333





由于源码里面ICertificateConfigLoader是internal类型,只能自己重新抄一次并实现了。

第三步,用EFCore持久化到数据库

搞个DBContext,把实体全部加进去,配置好关系之后,CodeFirst直接生成数据库哈哈哈哈

第四步,搞几个Management管理数据(CURD)

第五步,实现一下配置热更新

使用IChangeToken接口实现一个EFCoreReloadToken

第六步,再写个扩展方法替换原本的IProxyConfigProvider

最后一步,在Startup中用一下

services.AddReverseProxy()
.LoadFromEFCore();

数据管理好了,差个界面(找前端小姐姐要一个)

第一步,搞个控制器,加上简单CURD接口

第二步,找前端小姐姐要个界面对接一下API



好了搞完可以用了,试一试

搞一个测试WebAPi

加一个集群

加一个路由

用Postman测一测



好了正常使用,搞定。

路由匹配可以用多个占位符自由组合,然后在PathPattern转换里面可以使用这些参数

测试一下性能1000个并发100000个请求

最后放下代码~~

欢迎吐槽提意见或者一起改进哈哈哈

ReverseProxy.Store

体验用yarp当网关的更多相关文章

  1. 体验用yarp连接websocket

    前段时间一看yarp的仓库,wow,终于发布1.0版本了..net也升级到6版本了,之前一直只是用yarp做HTTP转发,今天刚好试试websocket 话不多说,直接开搞 配置集群 首先先配置集群信 ...

  2. ABP Framework 5.3.0 版本新增功能和变更说明

    ABP Framework 5.3.0 稳定版已在2022年6月14日正式发布. 以下是本版本的新增功能: "开始"页面提供创建单层项目选项 启动模板提供 PWA 支持 Volo. ...

  3. 翻译-微服务API Gateway

    原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下你正在建立一个使用微服务模式的网上商 ...

  4. [转]MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

  5. 微服务API Gateway

    翻译-微服务API Gateway 原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下 ...

  6. 网络游戏MMORPG服务器架构

    转载于:http://justdo2008.iteye.com/blog/1936795 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构 .关键词 网络协议 网络IO 消息 ...

  7. Spring Boot和Spring cloud

    微服务框架SpringBoot简单验证 首先摘录部分IBM网站部分内容对框架做一个简单说明 http://www.ibm.com/developerworks/cn/java/j-lo-spring- ...

  8. 【设计模式 7】从公司的目前框架和API Gateway,谈谈对外观模式的理解

    我,第一次用到外观模式,应该是3年多以前.那时候是做一个收费系统,在当时的U层和B层之间,加了一层Facade.当时,在一些复杂的业务逻辑处理时,感受到了加入外观层的好处,但对于一些简单的(我指的是, ...

  9. MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

随机推荐

  1. npm ci All In One

    npm ci All In One npm 性能优化 npm ci 使用干净的面板安装项目 https://docs.npmjs.com/cli/v6/commands/npm-ci # npm cl ...

  2. Dart DevTools & Flutter

    Dart DevTools & Flutter https://flutter.dev/docs/development/tools/devtools/overview https://dar ...

  3. how to copy to clipboard using windows cmd

    how to copy to clipboard using windows cmd Windows clipboard command line https://www.labnol.org/sof ...

  4. VSCode & Node.js & debugger & inspector

    VSCode & Node.js & debugger & inspector F5 ws 元信息 (UUID) ws://127.0.0.1:46912/efa91bda-1 ...

  5. Scrapy 项目:腾讯招聘

    目的: 通过爬取腾讯招聘网站(https://careers.tencent.com/search.html)练习Scrapy框架的使用 步骤: 1.通过抓包确认要抓取的内容是否在当前url地址中,测 ...

  6. .NET并发编程-数据并行

    本系列学习在.NET中的并发并行编程模式,实战技巧 内容目录 数据并行Fork/Join模式PLINQ 本小节开始学习数据并行的概念模式,以及在.NET中数据并行的实现方式.本系列保证最少代码呈现量, ...

  7. WPF窗口和用户控件事件相互触发

    问题1: WPF项目里有一个窗口和一个用户控件,窗口和用户控件里都有一个Button,点击窗口里的Button如何触发用户控件里Button的Click事件 解答: //窗口代码 public par ...

  8. 给新手的 11 个 Docker 免费上手项目

    转: 给新手的 11 个 Docker 免费上手项目 作者:老K玩代码 来源:toutiao.com/i6882755471015576072 Docker 是一个开源的应用容器引擎,让开发者可以打包 ...

  9. Linux常用操作命令之文件权限(二)

    一.基本概念 Linux/Unix是多用户系统:root是超级用户,拥有最高权限,其他用户及权限由root管理.文件/目录的权限有三种,可读read(r)可写write(w)可执行excute(x). ...

  10. LeetCode-二叉搜索树的第k大节点

    二叉搜索树的第k大节点 LeetCode-面试题54 需要充分了解二叉搜索树的性质. 利用中序遍历的思想,采用相反的思想:先遍历右节点再遍历左节点. /** * 给定一棵二叉搜索树,请找出其中第k大的 ...