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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

聊一聊Yarp结合Nacos完成服务发现

發(fā)布時(shí)間:2023/12/4 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聊一聊Yarp结合Nacos完成服务发现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

Yarp 這個(gè)反向代理出來(lái)后,相信還是有不少人在關(guān)注的。

在 Yarp 中,反向代理的配置默認(rèn)也是基于配置文件的,也有不少大佬已經(jīng)把這個(gè)配置做成了數(shù)據(jù)庫(kù)配置+可視化界面。

仔細(xì)想了想,做成數(shù)據(jù)庫(kù)配置,好像只是便于配置的管理,對(duì)服務(wù)注冊(cè)和發(fā)現(xiàn)這一塊還是偏弱。

好比訂單服務(wù)加了 3 個(gè)實(shí)例,這個(gè)時(shí)候要去配置一下,把這 3 個(gè)實(shí)例加進(jìn)去。

如果增加的服務(wù)多了,頻率高了,肯定是不太想人工去介入的,會(huì)嫌麻煩。

尤其是在引入了注冊(cè)中心的情況下,都會(huì)想讓它自動(dòng)適配這些變化。

基于這個(gè)情況,老黃花時(shí)間嘗試了一下把 Yarp 和 Nacos 結(jié)合,讓服務(wù)和實(shí)例的新增、減少做了一個(gè)適配,可以動(dòng)態(tài)化,一定程度減少了人為的干預(yù)。

下面簡(jiǎn)單看看。

示例服務(wù)

準(zhǔn)備下面的服務(wù)

  • YarpWithNacosSample 反向代理集成

  • OrderSvcA ?訂單服務(wù)-A

  • OrderSvcB ?訂單服務(wù)-B

  • UserSvc ? ?用戶服務(wù)

其中兩個(gè)訂單服務(wù)是為了模擬服務(wù)實(shí)例上下線的,用戶服務(wù)是模擬服務(wù)上下線的。

下面三個(gè)業(yè)務(wù)服務(wù),代碼基本一樣

只貼出用戶服務(wù)的。

using?Nacos.AspNetCore.V2;var?builder?=?WebApplication.CreateBuilder(args);builder.Services.AddNacosAspNet(builder.Configuration);builder.Services.AddControllers();var?app?=?builder.Build();if?(app.Environment.IsDevelopment()) {app.UseDeveloperExceptionPage(); }app.UseRouting();app.UseEndpoints(endpoints?=> {endpoints.MapGet("/",?()?=>{return?Results.Ok("user?svc?9001");}); });app.Run("http://*:9001");

然后是配置

{"Logging":?{"LogLevel":?{"Default":?"Warning","Nacos.AspNetCore":?"Information","Microsoft.Hosting.Lifetime":?"Information"}},"AllowedHosts":?"*","nacos":?{"ServerAddresses":?[?"http://localhost:8848"?],"DefaultTimeOut":?15000,"Namespace":?"yarp","ListenInterval":?1000,"ServiceName":?"usersvc","GroupName":?"DEFAULT_GROUP","ClusterName":?"DEFAULT","Weight":?100,"RegisterEnabled":?true,"InstanceEnabled":?true,"Ephemeral":?true,"Secure":?false,"ConfigUseRpc":?true,"NamingUseRpc":?true} }

再來(lái)看看重點(diǎn)的反向代理這一塊。

using?global::Nacos.V2.DependencyInjection; using?Yarp.ReverseProxy.Configuration;var?builder?=?WebApplication.CreateBuilder(args);builder.Services.AddNacosV2Naming(x?=> {x.ServerAddresses?=?new?List<string>?{?"http://localhost:8848/"?};x.Namespace?=?"yarp";x.NamingUseRpc?=?true; });builder.Services.AddReverseProxy().AddNacosServiceDiscovery(groupNames:?"DEFAULT_GROUP",?percount:100,enableAutoRefreshService:?true,autoRefreshPeriod:?30);var?app?=?builder.Build();app.UseRouting();app.UseEndpoints(endpoints?=> {endpoints.MapGet("/yarp",?(IProxyConfigProvider?provider)?=>{var?res?=?provider.GetConfig();return?Results.Ok(res);});endpoints.MapReverseProxy(); });app.Run("http://*:9091");

可以看到,反向代理這個(gè)項(xiàng)目并沒(méi)有注冊(cè)到 Nacos 上面去,因?yàn)樗恍枰l(fā)現(xiàn)其他服務(wù),并不需要被其他服務(wù)發(fā)現(xiàn)。

先啟動(dòng) OrderSvcA,讓其注冊(cè)到 Nacos。

再啟動(dòng)反向代理項(xiàng)目,這個(gè)時(shí)候可以看到日志,有輸出 OrderSvcA 加入的痕跡。

然后訪問(wèn) localhost:9091/yarp 看一下當(dāng)前的配置。

再通過(guò)反向代理訪問(wèn)一下 OrderSvc。

接下來(lái)啟動(dòng) OrderSvcB,讓其注冊(cè)到 Nacos。

這個(gè)時(shí)候,反向代理項(xiàng)目會(huì)顯示把這個(gè)新實(shí)例加進(jìn)去了。

這個(gè)時(shí)候訪問(wèn)會(huì)有負(fù)載均衡的策略去訪問(wèn) ordersvc。

最后再來(lái)看看新服務(wù)上線的情況,啟動(dòng) UserSvc。

再訪問(wèn)的話,也是正常的。

這里需要注意的是,新加的服務(wù),不會(huì)實(shí)時(shí)更新到配置中,取決于自動(dòng)刷新的間隔,因?yàn)?Nacos 目前沒(méi)有提供服務(wù)變動(dòng)的通知,只有服務(wù)實(shí)例的,所以這一塊是要定時(shí)主動(dòng)去查詢的。

到這里的話,基本上演示就結(jié)束了。

不過(guò)有人應(yīng)該會(huì)對(duì)轉(zhuǎn)發(fā)規(guī)則那一塊有疑問(wèn),為什么是 【反向代理地址/服務(wù)名/服務(wù)的相對(duì)路徑】

這一個(gè)是默認(rèn)的實(shí)現(xiàn),因?yàn)橐?guī)則這一塊,一百個(gè)人就會(huì)有一百個(gè)不一樣的,有想放請(qǐng)求頭的,查詢參數(shù)的等等,所以這一個(gè)是開放的,可以自由替換。

寫在最后

Yarp 還是個(gè)比較有意思的項(xiàng)目,后面應(yīng)該會(huì)有不少人使用。

目前這個(gè)擴(kuò)展包還是預(yù)覽版,沒(méi)有發(fā)布正式版,主要是想豐富一下內(nèi)容。

nacos-sdk-csharp 的地址 :https://github.com/nacos-group/nacos-sdk-csharp

nacos-csharp-extensions 的地址:https://github.com/catcherwong/nacos-csharp-extensions

本文示例代碼的地址 :https://github.com/catcherwong-archive/2021/tree/main/YarpWithNacosSample

總結(jié)

以上是生活随笔為你收集整理的聊一聊Yarp结合Nacos完成服务发现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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