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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

聊一聊如何在.NET Core中使用Nacos 2.0

發布時間:2023/12/4 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聊一聊如何在.NET Core中使用Nacos 2.0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

隨著 nacos 2.0.0 正式發布,老黃這邊也跟著發布了 1.0.2 版本的 nacos-sdk-csharp。

下面簡單聊一下相關的使用。

純 SDK 的使用

首先要安裝 nuget 包

<PackageReference?Include="nacos-sdk-csharp"?Version="1.0.2"?/>

這里有一點要注意,包名里面的 unofficial 已經移除,請確保使用對了正確的包。

下面就是依賴注入的配置。

services.AddNacosV2Config(x?=> {x.ServerAddresses?=?new?System.Collections.Generic.List<string>?{?"http://localhost:8848/"?};x.EndPoint?=?"";x.Namespace?=?"cs-test";/*x.UserName?=?"nacos";x.Password?=?"nacos";*///?swich?to?use?http?or?rpcx.ConfigUseRpc?=?true; });services.AddNacosV2Naming(x?=> {x.ServerAddresses?=?new?System.Collections.Generic.List<string>?{?"http://localhost:8848/"?};x.EndPoint?=?"";x.Namespace?=?"cs-test";/*x.UserName?=?"nacos";x.Password?=?"nacos";*///?swich?to?use?http?or?rpcx.NamingUseRpc?=?true; });

其中有兩個關鍵配置, ConfigUseRpc 和 NamingUseRpc,分別表示配置和服務是否要使用最新的 gRPC 協議和服務端對接。

服務端是 2.0.0 的,一定要設置成 true

接下來看看配置這一塊的使用。

配置這邊暴露出來的接口是 INacosConfigService。

發布,獲取,刪除配置的操作示例如下:

static?async?Task?PublishConfig(INacosConfigService?svc) {var?dataId?=?"demo-dateid";var?group?=?"demo-group";var?val?=?"test-value-"?+?DateTimeOffset.Now.ToUnixTimeSeconds().ToString();await?Task.Delay(500);var?flag?=?await?svc.PublishConfig(dataId,?group,?val);Console.WriteLine($"======================發布配置結果,{flag}"); }static?async?Task?GetConfig(INacosConfigService?svc) {var?dataId?=?"demo-dateid";var?group?=?"demo-group";await?Task.Delay(500);var?config?=?await?svc.GetConfig(dataId,?group,?5000L);Console.WriteLine($"======================獲取配置結果,{config}"); }static?async?Task?RemoveConfig(INacosConfigService?svc) {var?dataId?=?"demo-dateid";var?group?=?"demo-group";await?Task.Delay(500);var?flag?=?await?svc.RemoveConfig(dataId,?group);Console.WriteLine($"=====================刪除配置結果,{flag}"); }

這三個是常規操作,不會有太大的變化。

配置監聽這一塊是有所調整的,Listener 變成是必須要實現 IListener 接口的實例了。

其實里面也就只有一個方法,下面是一個簡單的實現,收到配置變更信息后,把配置信息輸出到控制臺。

class?DemoConfigListener?:?IListener {public?void?ReceiveConfigInfo(string?configInfo){Console.WriteLine($"================收到配置變更信息了?===》{configInfo}");} }

有了監聽的實現后,就可以添加和移除監聽了。

static?async?Task?ListenConfig(INacosConfigService?svc,?IListener?listener) {var?dataId?=?"demo-dateid";var?group?=?"demo-group";//?添加監聽await?svc.AddListener(dataId,?group,?listener);await?Task.Delay(500);//?模擬配置變更,listener會收到變更信息await?PublishConfig(svc);await?Task.Delay(500);await?PublishConfig(svc);await?Task.Delay(500);//?移除監聽await?svc.RemoveListener(dataId,?group,?listener);//?配置變更后,listener不會收到變更信息await?PublishConfig(svc); }

把這些放在控制臺里面跑一下

DemoConfigListener?listener?=?new?DemoConfigListener(); await?PublishConfig(configSvc); await?GetConfig(configSvc); await?RemoveConfig(configSvc); await?ListenConfig(configSvc,?listener);

大概能看到下面這樣的輸出:

再來看一下服務這一塊的使用。

服務這邊暴露出來的接口是 INacosNamingService。

注冊,獲取,注銷服務的操作示例如下:

static?async?Task?RegisterInstance(INacosNamingService?svc,?int?port?=?9999) {await?Task.Delay(500);var?instace?=?new?Nacos.V2.Naming.Dtos.Instance{ServiceName?=?"demo-svc1",ClusterName?=?Nacos.V2.Common.Constants.DEFAULT_CLUSTER_NAME,Ip?=?"127.0.0.1",Port?=?port,Enabled?=?true,Ephemeral?=?true,Healthy?=?true,Weight?=?100,InstanceId?=?$"demo-svc1-127.0.0.1-{port}",Metadata?=?new?System.Collections.Generic.Dictionary<string,?string>{{?"m1",?"v1"?},{?"m2",?"v2"?},}};//?注冊實例有很多重載,選適合自己的即可。await?svc.RegisterInstance(instace.ServiceName,?Nacos.V2.Common.Constants.DEFAULT_GROUP,?instace);Console.WriteLine($"======================注冊實例成功"); }static?async?Task?GetAllInstances(INacosNamingService?svc) {await?Task.Delay(500);//?獲取全部實例有很多重載,選適合自己的即可。最后一個參數表明要不要訂閱這個服務// SelectInstances, SelectOneHealthyInstance 是另外的方法可以獲取服務信息。var?list?=?await?svc.GetAllInstances("demo-svc1",?Nacos.V2.Common.Constants.DEFAULT_GROUP,?false);Console.WriteLine($"======================獲取實例成功,{Newtonsoft.Json.JsonConvert.SerializeObject(list)}"); }static?async?Task?DeregisterInstance(INacosNamingService?svc) {await?Task.Delay(500);//?注銷實例有很多重載,選適合自己的即可。await?svc.DeregisterInstance("demo-svc1",?Nacos.V2.Common.Constants.DEFAULT_GROUP,?"127.0.0.1",?9999);Console.WriteLine($"======================注銷實例成功"); }

這里的實例方法只是其中一部分,幾乎每個方法都有很多的重載,大家按需選擇即可。

服務的訂閱,早期版本是一個印度小哥弄的一部分,基于udp的,不過效果并不好,所以一直沒有啟用這個功能。

在這個版本,已經啟用了這個功能。

和監聽配置一樣,也要實現一個對應的接口 ?IEventListener。

里面同樣也就只有一個方法,下面是一個簡單的實現,收到變更信息后,把服務信息輸出到控制臺。

class?DemoEventListener?:?IEventListener {public?Task?OnEvent(IEvent?@event){if?(@event?is?Nacos.V2.Naming.Event.InstancesChangeEvent?e){Console.WriteLine($"==========收到服務變更事件=======》{Newtonsoft.Json.JsonConvert.SerializeObject(e)}");}return?Task.CompletedTask;} }?

訂閱的具體使用:

static?async?Task?Subscribe(INacosNamingService?svc,?IEventListener?listener) {//?訂閱服務變化await?svc.Subscribe("demo-svc1",?Nacos.V2.Common.Constants.DEFAULT_GROUP,?listener);//?模擬服務變化,listener會收到變更信息await?RegisterInstance(svc,?9997);await?Task.Delay(3000);//?取消訂閱await?svc.Unsubscribe("demo-svc1",?Nacos.V2.Common.Constants.DEFAULT_GROUP,?listener);//?服務變化后,listener不會收到變更信息await?RegisterInstance(svc);await?Task.Delay(1000); }

同樣放到控制臺看看效果。

DemoEventListener?eventListener?=?new?DemoEventListener(); await?RegisterInstance(namingSvc); await?GetAllInstances(namingSvc); await?DeregisterInstance(namingSvc); await?Subscribe(namingSvc,?eventListener);

大致輸出如下:

到這里的話,純 SDK 的基本使用就告一段落了。

下面再來看看集成 ASP.NET Core 的簡單用法。

集成配置

集成配置,是為了集成 Microsoft.Extensions.Configuration, 只需要變更 Provider 就可以替換配置源。

首先要安裝 nuget 包

<PackageReference?Include="nacos-sdk-csharp.Extensions.Configuration"?Version="1.0.2"?/>

然后是相關配置

{"NacosConfig":?{"Listeners":?[{"Optional":?false,"DataId":?"options1","Group":?"DEFAULT_GROUP"},{"Optional":?false,"DataId":?"options2","Group":?"DEFAULT_GROUP"},{"Optional":?false,"DataId":?"raw","Group":?"DEFAULT_GROUP"}],??"Tenant":?"cs","ServerAddresses":?[?"http://localhost:8848/"?],"UserName":?"","Password":?"","AccessKey":?"","SecretKey":?"","EndPoint":?""} }

這里的意思是,這個應用需要監聽三個配置項的變化,分別是 options1,options2 和 raw。

Optional 設置成 false,表示這個配置項不是可選的,是必須的,少了它程序就會出錯。

需要在 nacos 控制臺添加對應的配置。

如果使用 Option 的方式來讀取配置的話,還需要在 Startup 里面進行綁定。

public?void?ConfigureServices(IServiceCollection?services) {services.Configure<Options1>(Configuration.GetSection("AppSettings:Options1"));services.Configure<Options2>(Configuration.GetSection("AppSettings:Options2"));services.AddControllers(); }

然后暴露出一個接口來查看配置。

[ApiController] [Route("api/[controller]")] public?class?ConfigController?:?ControllerBase {private?readonly?ILogger<ConfigController>?_logger;private?readonly?IConfiguration?_configuration;private?readonly?Options1?_settings1;private?readonly?Options2?_settings2;public?ConfigController(ILogger<ConfigController>?logger,IConfiguration?configuration,IOptionsMonitor<Options1>?settings1,IOptionsMonitor<Options2>?settings2){_logger?=?logger;_configuration?=?configuration;_settings1?=?settings1.CurrentValue;_settings2?=?settings2.CurrentValue;}[HttpGet]public?string?Get(){_logger.LogInformation($"=====Options1======{Newtonsoft.Json.JsonConvert.SerializeObject(_settings1)}======");_logger.LogInformation($"=====Options2======{Newtonsoft.Json.JsonConvert.SerializeObject(_settings2)}======");_logger.LogInformation($"=====Raw?With?ConnectionStr======{_configuration.GetConnectionString("Default")}======");_logger.LogInformation($"=====Raw?With?Other======{_configuration["other"]}======");return?"ok";} }

初次訪問,正常輸出相應的配置信息。

在控制臺修改部分信息后,再次訪問,可以看到對應的配置信息已經更新了。

集成服務

集成服務,是為了方便程序啟動時,自動把服務注冊到 Nacos 里面。

首先要安裝 nuget 包

<PackageReference?Include="nacos-sdk-csharp.Extensions.AspNetCore"?Version="1.0.2"?/>

然后是服務的相關配置。

?"nacos":?{"EndPoint":?"","ServerAddresses":?[?"http://localhost:8848"?],"DefaultTimeOut":?15000,"Namespace":?"cs","ListenInterval":?1000,"ServiceName":?"NetCoreNamingDemo","GroupName":?"DEFAULT_GROUP","ClusterName":?"DEFAULT","Ip":?"","PreferredNetworks":?"192.168","Port":?9877,"Weight":?100,"RegisterEnabled":?true,"InstanceEnabled":?true,"Ephemeral":?true,"Secure":?false,"AccessKey":?"","SecretKey":?"","UserName":?"","Password":?"","ConfigUseRpc":?true,"NamingUseRpc":?true,"NamingLoadCacheAtStart":?"","Metadata":?{"aa":?"bb","cc":?"dd"}}

這里面多了幾個配置要單獨說明一下。

  • InstanceEnabled, 表示這個服務注冊上去后,是否馬上就上線

  • Secure,表示當前服務是否是安全實例,用于標識訪問的時候是否要啟用 https,這個在發現服務后,可以從 Metadata 里面取到

然后再 Startup 里面添加自動注冊的代碼。

public?void?ConfigureServices(IServiceCollection?services) {services.AddNacosAspNet(Configuration);services.AddControllers(); }

啟動服務后,可以在 nacos 控制臺看到相關的服務信息。

接下來就可以通過 INacosNamingService 接口來獲取到這個服務了。

//?找出一個健康的實例 var?instance?=?await?_svc.SelectOneHealthyInstance("NetCoreNamingDemo",?"DEFAULT_GROUP"); var?host?=?$"{instance.Ip}:{instance.Port}";//?根據?secure?來判斷服務要不要用?https, //?這里是約定,參考了?spring?cloud?那邊,不是強制的,也可以用其他標識 var?baseUrl?=?instance.Metadata.TryGetValue("secure",?out?_)??$"https://{host}":?$"http://{host}";if?(string.IsNullOrWhiteSpace(baseUrl))?return?"empty";var?url?=?$"{baseUrl}";var?client?=?_factory.CreateClient();var?resp?=?await?client.GetAsync(url); return?await?resp.Content.ReadAsStringAsync();

寫在最后

本文雖然簡單介紹了如何在 .NET Core 中使用 nacos 2.0 ,還有更多用法和細節等待挖掘和實現。

感興趣的話,歡迎您的加入,一起開發完善。

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

本文示例代碼的地址 :https://github.com/catcherwong-archive/Nacos2Demo

相關閱讀

  • https://github.com/alibaba/nacos/releases/tag/2.0.0

  • 聊一聊和Nacos 2.0.0對接那些事

  • ASP.NET Core集成Nacos配置中心之適配多格式配置

  • 在.NET Core中用最原生的方式讀取Nacos的配置

總結

以上是生活随笔為你收集整理的聊一聊如何在.NET Core中使用Nacos 2.0的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产porn | 色七七亚洲 | 一区二区三区成人 | 中国女人真人一级毛片 | av手机在线看 | 女人下边被添全过视频 | 豆花免费跳转入口官网 | av尤物在线| 欧美天天 | 97超碰总站 | 国产又黄又粗又爽 | 中文在线观看av | 中文字幕乱码人妻无码久久95 | 给我看高清的视频在线观看 | 自拍视频网站 | 一区二区亚洲 | 国产男男gay体育生网站 | 91av国产精品 | 亲嘴扒胸摸屁股免费视频日本网站 | 粗大挺进潘金莲身体在线播放 | 性一交一乱一区二区洋洋av | 老汉av网站 | 青青艹av | 国产精品久久99 | 欧美1区2区3区4区 | 婷婷影院在线观看 | 成人免费无码大片a毛片 | 射射av | 欧美日韩精品在线观看 | 中文字幕一区二区三区人妻电影 | 九九一级片 | 久久精品国产亚洲av嫖农村妇女 | 原神淫辱系列同人h | 老司机精品福利视频 | 黄色精品一区二区 | 性网爆门事件集合av | 久久99精品久久久久久 | 在线观看麻豆 | 亚洲欧美日韩国产 | 久久三级网 | 国产中文字幕第一页 | 九九热精品免费视频 | 亚洲无打码 | 性猛交xxxx乱大交孕妇2十 | 国产三级视频 | xiuxiuavnet| 超碰1997| 西西444www无码大胆 | 加勒比一区二区三区 | av在线播放网 | 无码人妻精品一区二区三应用大全 | 精品午夜久久 | 国产精品一区久久 | 成人午夜影院 | 亚洲性大片 | 天天综合网久久 | 麻豆69 | 中文免费视频 | 91精品国产麻豆 | 欧美日批 | 欧美成人a∨高清免费观看 国产精品999视频 | 日韩精品第一区 | 欧美日韩国产成人在线 | 欧美亚洲自拍偷拍 | 欧美午夜精品一区二区蜜桃 | 青青草55| 国产高清视频免费观看 | 亚洲h| 日韩一区二区在线视频 | 好男人网站| 国产一区久久久 | 色翁荡息又大又硬又粗又爽 | 黄视频免费在线观看 | 日本a在线观看 | 日韩作爱视频 | 黄色av网站在线播放 | 午夜影院久久 | 艹少妇视频 | 亚洲av成人精品午夜一区二区 | 日韩免费在线观看视频 | 亚洲天堂小说 | 成年人黄色免费视频 | 国产高清亚洲 | 波多野结衣啪啪 | 电影中文字幕 | 久久色在线视频 | 久久久久久久综合色一本 | 国产网站久久 | 乱人伦av| 奇米影视第四色首页 | 亚洲一区在线播放 | 婷婷四房综合激情五月 | 手机在线毛片 | 国产成人精品免高潮费视频 | 喷水av| 一区二区三区视频在线免费观看 | 艳妇乳肉豪妇荡乳xxx | 成人不卡av | 国产+日韩+欧美 |