YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关

8a6025d5e6aef147ac951c6004cdeab2.png

YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy 。所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分功能,比如根据不一样的域名代理到不一样的后端服务上。既然它可以做反向代理,那么其实也就可以做服务网关了,类似 Ocelot ,当然缺少部分功能,比如限流降级等。Anyway ,今天先来体验一下。

运行 YARP

YARP 使用起来非常简单,它只是一个类库而已。我们新建一个 ASP.NET Core 的空网站。然后使用 nuget 安装 Yarp.ReverseProxy 。

Install-Package Yarp.ReverseProxy -Version 1.0.0

修改 program.cs 文件为以下内容:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();

在 appsettings.json 文件添加 ReverseProxy 节点:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","ReverseProxy": {"Routes": {"route1" : {"ClusterId": "cluster1","Match": {"Path": "{**catch-all}"},}},"Clusters": {"cluster1": {"Destinations": {"destination1": {"Address": "https://www.baidu.com/"}}}}}
}

我们配置一个集群cluster1,地址为百度的网址;再配置一个路由route1,匹配所有的url。这样当我们访问这个网站的时候所有的请求全部会代理给百度。
让我们运行起来试一下:7c86b566b3d676093430833e4bc5a4b1.png可以看到我们访问 localhost:5085 的地址百度的内容被渲染出来了。

集成 AgileConfig 来热更新配置

通过以上我们简单的演示了 YARP 的使用。我们的演示配置文件还算简单,但是 YARP 的精髓其实都在配置文件里,如果你的代理策略很复杂那么 YARP 的配置就会相应的很复杂。使用本地的 appsettings.json 显然每次更新配置文件太麻烦,而且需要重启 YARP 网关。以下我们演示下 YARP 如何集成 AgileConfig ,使得配置可以在线编辑,并且支持热更新。
AgileConfig 是一个轻量级的配置中心,可以方便的为 .NET 项目提供配置中心功能,项目地址:https://github.com/dotnetcore/AgileConfig 。

运行 AgileConfig 服务端

AgileConfig 服务端可以通过 docker 方便的部署起来。

sudo docker run \
--name agile_config \
-e TZ=Asia/Shanghai \
-e adminConsole=true \
-e db:provider=sqlite \
-e db:conn="Data Source=agile_config.db" \
-p 5000:5000 \
#-v /your_host_dir:/app/db \
-d kklldog/agile_config:latest

部署成功后,我们在应用界面新建一个应用:Yarp_testac65beed8ee75fe8b7af03d30f4d338c.png
在配置项编辑界面点击“编辑 JSON”,弹出 JSON 编辑视图,把原来 appsettings.json 文件里的ReverseProxy节点的内容复制进去。点击“保存”>“发布” 。6cfff3f0568aeb332c2fb26e02dfa6a3.png

集成 AgileConfig.Client

AgileConfig 配置成功后,我们需要在 YARP 网关项目上集成 AgileConfig.Client ,通过它来读取配置中心的配置。
使用 nuget 安装 AgileConfig.Client :

Install-Package AgileConfig.Client -Version 1.2.1.5

在 appsettings.json 里添加 AgileConfig 节点,里面配置相关应用的信息,并且删掉原来的ReverseProxy节点,因为已经不需要了。

{"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*","AgileConfig": {"appId": "yarp_test","secret": "","nodes": "http://localhost:5000/"}
}

修改 program.cs 文件为如下内容:

var builder = WebApplication.CreateBuilder(args);//add agileconfig configuration provider
builder.Host.ConfigureAppConfiguration((_, bd) => {bd.AddAgileConfig();
});builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration);var app = builder.Build();
app.MapReverseProxy();
app.Run();

修改完之后,我们运行一下 YARP 网关项目,如果访问localhost:5085能够显示百度的页面那么说明配置中心的配置已经被正确的读取到了。

热更新

如果上面的步骤都成功了,那么我们可以来尝试下配置的热更新。打开 Agileconfig 的服务端,继续编辑以上配置,我们把集群的地址改成 www.qq.com ,改成腾讯的网管。点击“保存”>“发布”。a615ef434ac5ae35fcf872079d8d7b21.png
不用重启 YARP 网关项目,我们直接刷新 localhost:5085 那个页面,可以看到现在显示的已经是腾讯的网页了。b48bfd9dcce7217905211ed18fce2e9f.png

演示项目地址:https://github.com/kklldog/YarpDemo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IBatisNet Spring.Net】ORM与IOC 简单配置

1.修改WebConfig.cs配置文件 <configuration><configSections><sectionGroup name"spring"><section name"context" type"Spring.Context.Support.WebContextHandler, Spring.Web" /><section name"objects&quo…

Codeforces Round #323 (Div. 2) C.GCD Table

C. GCD TableThe GCD table G of size n  n for an array of positive integers a of length n is defined by formula Let us remind you that the greatest common divisor (GCD) of two positive integers x and y is the greatest integer that is divisor of both xand …

豆瓣9.8,它凭「少儿不宜」吊打所有美剧!脑洞大开必看神作!【内附资源】...

全世界只有3.14 % 的人关注了爆炸吧知识给最近剧荒的你安利一部脑洞大开、想象力天马行空的成人动画&#xff08;妥妥的神剧!&#xff09;——《Rick and Morty》Rick and Morty瑞克和莫蒂这部少儿不宜????的成人动画到底收获了多少好评呢&#xff1f;抛开拿到美国电视剧届…

Android之DrawText详解

如果你经常使用Canvas的draw***方法去绘制一些图像图形&#xff0c;绘制的坐标是从Canvas左上角开始计算的&#xff0c;如果想要把一个图像放到某个位置&#xff0c;直接drawBitmap传递图片左上角的坐标就行了。那drawText就不一样&#xff0c;如果你传递进去字符串&#xff0c…

托马斯反驳牛顿被骂,普朗克颜值过高遭上帝捉弄,狄拉克却因爱情成话痨

全世界只有3.14 % 的人关注了爆炸吧知识今天&#xff0c;小编抑制不住自己&#xff0c;要给大家强烈推荐一个公众号“少年物理学家”&#xff01;少年物理学家是一个致力为学生家长和老师&#xff0c;提供丰富的物理小知识&#xff1a;物理学家、物理趣谈、科技与物理、万物背后…

CALL FOR DUTY 来和我们一起冒险吧!

我们面临的挑战是什么&#xff1f;昨天发了一篇让大家提问Scott Hanselman的问题&#xff0c;有人调侃 &#xff08;也许是认真的&#xff09;让我问他&#xff1a;“.NET还有救吗&#xff1f;” &#xff0c;我的第一反应不是.NET还有没有救&#xff0c;而是该怎么救问这个问题…

HarmoryOS,API9项目配置

官方配置信息讲解如下&#xff1a;文档中心 1、APP名字图标&#xff1a;在entry模块&#xff0c;module.json5文件中 2、module配置 build-profile.json5文件中 3、包名 app.json5

厉害!他33岁破格晋升教授和博导,成果还打破国外技术垄断

全世界只有3.14 % 的人关注了爆炸吧知识来源 | 长江大学新闻网、长江大学石油工程学院、PaperRSS转自 | 学术资源大全他是人到中年"顺意人生"的代表&#xff0c;29岁晋升副教授、33岁破格晋升教授和博导&#xff1b;他独辟蹊径&#xff0c;将"智能"融入石油…

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

设计模式 ( 十四 ) 迭代器模式Iterator&#xff08;对象行为型&#xff09;1.概述类中的面向对象编程封装应用逻辑。类&#xff0c;就是实例化的对象&#xff0c;每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法&#xff0c;但通常你会处理一组对…

Android之Volley 源码解析

原文来自&#xff1a;http://www.codekk.com 1. 功能介绍 1.1. Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。 名字由来&#xff1a;a burst or emission of many things or a large amount at once 发布演讲…

双击打开Inventor文件

为什么80%的码农都做不了架构师&#xff1f;>>> 出现的问题&#xff1a; 正常启动电脑后&#xff0c;我双击桌面上的一个idw文件&#xff0c;默认使用 Inventor 2013 打开该格式的文件&#xff1b;但 Inventor 启动不到一半就弹出了如下的错误窗口&#xff0c;点击…

phpstrom 编辑器设置

http://www.jb51.net/article/58069.htm 配置sublime主题 保存配置的路径为&#xff1a;将Monokai_Sublime.xml拷贝到C:\Users\Administrator\.WebIde100\config\colors&#xff0c;然后重启phpstrom即可 当主题样式选为暗黑色的时候&#xff0c;选中的代码的背景色也会有点暗…

记一次 .NET 某妇产医院 WPF内存溢出分析

一&#xff1a;背景 1. 讲故事上个月有位朋友通过博客园的短消息找到我&#xff0c;说他的程序存在内存溢出情况&#xff0c;寻求如何解决。要解决还得通过 windbg 分析啦。二&#xff1a;Windbg 分析 1. 为什么会内存溢出大家都知道内存溢出对应着 .NET 中的 OutOfMemonryExce…

16世纪的旷世奇才:大学弃医丛数,仅用20年就独立发明了温度计、军事罗盘、天文望远镜,后半生双目失明还能写出惊人科学著作

全世界只有3.14 % 的人关注了爆炸吧知识传说&#xff0c;在崇尚绝对权威的中世纪里&#xff0c;有这么一位敢于质疑权威的年轻人。在比萨斜塔上做了“两个铁球同时落地”的实验&#xff0c;得出了重量不同的两个铁球同时下落的结论。从此推翻了亚里士多德“物体下落速度和重量成…

禅道项目管理软件介绍

使用流程 一、分享的流程图 二、流程图 维护产品及模块 一、如何来添加产品呢&#xff1f;让我们来看下步骤&#xff1a; 以管理员或者其他有产品管理权限的帐号登录。点击产品视图。在页面右侧&#xff0c;点击“新增产品”&#xff0c;即可出来产品添加页面。&#xff08;第一…

轻松学PHP编程 源代码

http://pan.baidu.com/share/link?shareid170353&uk1191536722 转载于:https://blog.51cto.com/letianwuji/1106854

java jar包 平滑重启,nginx 平滑重启的实现方法

一、背景在服务器开发过程中&#xff0c;难免需要重启服务加载新的代码或配置&#xff0c;如果能够保证server重启的过程中服务不间断&#xff0c;那重启对于业务的影响可以降为0。最近调研了一下nginx平滑重启&#xff0c;觉得很有意思&#xff0c;记录下来供有兴趣的同学查阅…

Android之图形图像之使用Path类总结

Path类可以预先在View上将N个点连成一条"路径",然后调用Canvas的drawPath(path,paint)即可沿着路径绘制图形 Android还为路径绘制提供了PathEffect来定义绘制效果,PathEffect包含如下子类 ComposePathEffect CornerPathEffect DashPathEffect DiscretePathEffect Pat…

[ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

描述 农夫约翰上个星期刚刚建好了他的新牛棚&#xff0c;他使用了最新的挤奶技术。不幸的是&#xff0c;由于工程问题&#xff0c;每个牛栏都不一样。第一个星期&#xff0c;农夫约翰随便地让奶牛们进入牛栏&#xff0c;但是问题很快地显露出来&#xff1a;每头奶牛都只愿意在她…

神奇的交际圈!这位17世纪的法国神父结交的好朋友,竟然都是一流数学牛人:笛卡尔、费马、加森迪······

全世界只有3.14 % 的人关注了爆炸吧知识话说&#xff0c;在近代数学史上&#xff0c;人们惊讶地发现17至18世纪的法国竟然产生了众多一流的数学家。然而&#xff0c;最早想到要培养一波优秀人才的&#xff0c;成就这段群星璀璨的传奇历史&#xff0c;并非是君王。而是出自于一位…