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


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。这样当我们访问这个网站的时候所有的请求全部会代理给百度。
让我们运行起来试一下:

可以看到我们访问 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_test

在配置项编辑界面点击“编辑 JSON”,弹出 JSON 编辑视图,把原来 appsettings.json 文件里的ReverseProxy节点的内容复制进去。点击“保存”>“发布” 。

集成 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 ,改成腾讯的网管。点击“保存”>“发布”。

不用重启 YARP 网关项目,我们直接刷新 localhost:5085 那个页面,可以看到现在显示的已经是腾讯的网页了。

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

关注我的公众号一起玩转技术

文章来源:https://www.cnblogs.com/kklldog/p/yarp-agileconfig.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:使用WtmPlus低代码平台提高生产力
下一篇:重新认识Docker Compose之Sidecar模式
评论列表

发表评论

评论内容
昵称:
关联文章

YARP+AgileConfig 5分钟实现一个支持配置更新代理
AgileConfig-1.5.5 发布 - 支持 JSON 编辑模式
Yarp 让系统内调度更灵活
asp.net core mvc修改cshtml试图加载动态更新
使用 mitmproxy + python 做拦截代理
.NET Core 实现动态代理做AOP(面向切面编程)
.NET6中一些常用组件配置及使用记录,持续更新中。。。
ASP.NET Core官教程,资料查找
页面快排插件配置支持图片上传
.NET 百万级 大数据插入、更新支持多种数据库
C#获得类型Type实现接口列表,支持排除基类实现接口
dotnetCampus.UITest.WPF 一个支持中文用例界面单元测试框架
服务器安全:限制外访问解决方案
使用.NET 6开发TodoList应用(26)——实现Configuration和Option强类型绑定
易闪电邮客户端中配置企业邮箱方法
[WPF] 实现一个很久以前流行按钮样式
TinyMCE富文本编辑器 autoLink 插件配置,全角支持
[WPF] 抄一个 CSS3 实现按钮
DevExpress 组件 历史各版本下载地址【更新:V21.1.5
20210904 更新日志

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码