日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/4 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

YARP 是微軟開源的一個(gè)反向代理項(xiàng)目,英文名叫 Yet Another Reverse Proxy 。所謂反向代理最有名的那就是 nginx 了,沒錯(cuò) YARP 也可以用來完成 nginx 的大部分功能,比如根據(jù)不一樣的域名代理到不一樣的后端服務(wù)上。既然它可以做反向代理,那么其實(shí)也就可以做服務(wù)網(wǎng)關(guān)了,類似 Ocelot ,當(dāng)然缺少部分功能,比如限流降級(jí)等。Anyway ,今天先來體驗(yàn)一下。

運(yùn)行 YARP

YARP 使用起來非常簡單,它只是一個(gè)類庫而已。我們新建一個(gè) ASP.NET Core 的空網(wǎng)站。然后使用 nuget 安裝 Yarp.ReverseProxy 。

Install-Package?Yarp.ReverseProxy?-Version?1.0.0

修改 program.cs 文件為以下內(nèi)容:

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

在 appsettings.json 文件添加 ReverseProxy 節(jié)點(diǎn):

{"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/"}}}}} }

我們配置一個(gè)集群cluster1,地址為百度的網(wǎng)址;再配置一個(gè)路由route1,匹配所有的url。這樣當(dāng)我們?cè)L問這個(gè)網(wǎng)站的時(shí)候所有的請(qǐng)求全部會(huì)代理給百度。
讓我們運(yùn)行起來試一下:可以看到我們?cè)L問 localhost:5085 的地址百度的內(nèi)容被渲染出來了。

集成 AgileConfig 來熱更新配置

通過以上我們簡單的演示了 YARP 的使用。我們的演示配置文件還算簡單,但是 YARP 的精髓其實(shí)都在配置文件里,如果你的代理策略很復(fù)雜那么 YARP 的配置就會(huì)相應(yīng)的很復(fù)雜。使用本地的 appsettings.json 顯然每次更新配置文件太麻煩,而且需要重啟 YARP 網(wǎng)關(guān)。以下我們演示下 YARP 如何集成 AgileConfig ,使得配置可以在線編輯,并且支持熱更新。
AgileConfig 是一個(gè)輕量級(jí)的配置中心,可以方便的為 .NET 項(xiàng)目提供配置中心功能,項(xiàng)目地址:https://github.com/dotnetcore/AgileConfig 。

運(yùn)行 AgileConfig 服務(wù)端

AgileConfig 服務(wù)端可以通過 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

部署成功后,我們?cè)趹?yīng)用界面新建一個(gè)應(yīng)用:Yarp_test
在配置項(xiàng)編輯界面點(diǎn)擊“編輯 JSON”,彈出 JSON 編輯視圖,把原來 appsettings.json 文件里的ReverseProxy節(jié)點(diǎn)的內(nèi)容復(fù)制進(jìn)去。點(diǎn)擊“保存”>“發(fā)布” 。

集成 AgileConfig.Client

AgileConfig 配置成功后,我們需要在 YARP 網(wǎng)關(guān)項(xiàng)目上集成 AgileConfig.Client ,通過它來讀取配置中心的配置。
使用 nuget 安裝 AgileConfig.Client :

Install-Package?AgileConfig.Client?-Version?1.2.1.5

在 appsettings.json 里添加 AgileConfig 節(jié)點(diǎn),里面配置相關(guān)應(yīng)用的信息,并且刪掉原來的ReverseProxy節(jié)點(diǎn),因?yàn)橐呀?jīng)不需要了。

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

修改 program.cs 文件為如下內(nèi)容:

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();

修改完之后,我們運(yùn)行一下 YARP 網(wǎng)關(guān)項(xiàng)目,如果訪問localhost:5085能夠顯示百度的頁面那么說明配置中心的配置已經(jīng)被正確的讀取到了。

熱更新

如果上面的步驟都成功了,那么我們可以來嘗試下配置的熱更新。打開 Agileconfig 的服務(wù)端,繼續(xù)編輯以上配置,我們把集群的地址改成 www.qq.com ,改成騰訊的網(wǎng)管。點(diǎn)擊“保存”>“發(fā)布”。
不用重啟 YARP 網(wǎng)關(guān)項(xiàng)目,我們直接刷新 localhost:5085 那個(gè)頁面,可以看到現(xiàn)在顯示的已經(jīng)是騰訊的網(wǎng)頁了。

演示項(xiàng)目地址:https://github.com/kklldog/YarpDemo

總結(jié)

以上是生活随笔為你收集整理的YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。