日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线能看的av | 在线视频二区 | 人体裸体bbbbb欣赏 | 国产人澡人澡澡澡人碰视频 | 亚洲av人无码激艳猛片服务器 | 国产成人精品一区二区色戒 | 一级女人毛片 | 一区二区日韩电影 | 91中文视频| 亚洲欧美高清在线 | 毛片高清免费 | 91视频毛片 | 99久久久无码国产精品性 | 国产只有精品 | 日韩avav| 大肉大捧一进一出好爽视频动漫 | 亚洲天堂2013| 午夜影院在线视频 | 91在线观看免费高清 | 蜜桃精品在线观看 | 一区二区三区麻豆 | 日韩激情床戏 | 欧美日韩成人在线播放 | 中文幕无线码中文字夫妻 | 午夜精品久久久久久久久久蜜桃 | 91精品国产高清一区二区三密臀 | 亚洲av无一区二区三区久久 | 伊人毛片| 国产精品女教师 | 少妇毛片一区二区三区粉嫩av | 香蕉视频在线免费播放 | 久久女人天堂 | 国产成人无码av | 绝顶高潮videos合集 | 午夜看片福利 | 性一级视频 | 欧美一级色 | 日剧大尺度床戏做爰 | 国产美女明星三级做爰 | 亚洲在线免费观看 | 亚洲综合自拍 | av网站黄色 | 狠狠插av | 超级砰砰砰97免费观看最新一期 | 精品婷婷色一区二区三区蜜桃 | 一二区在线视频 | 麻豆成人精品国产免费 | av一区二区三区 | 绯色av一区二区 | av毛片精品 | 成人av视屏 | 中文字幕免费视频观看 | 国产情侣一区二区三区 | 亚洲高清视频一区二区 | 瑟瑟视频在线免费观看 | 久草免费看 | 国产av无码专区亚洲a∨毛片 | 3o一40一50一6o女人毛片 | 免费黄网站在线 | 国产绿帽一区二区三区 | 伊人超碰 | 精品久久国产 | 秋霞午夜网 | 97福利社| 国产亚洲av综合人人澡精品 | 国产精品98 | 婷婷开心激情 | 久久成人人人人精品欧 | 丰腴饱满的极品熟妇 | 国产无遮挡又黄又爽在线观看 | 日韩一区视频在线 | 黄色三级大片 | 国产精品三级在线观看无码 | 视频一区二区在线 | 亚洲精品一区二区 | 成年人性生活视频 | 欧美在线一区二区视频 | 直接看毛片 | 日本人添下边视频免费 | 一级黄色影院 | 91官网在线 | 色香蕉在线视频 | 中文字幕资源网 | 中文字幕乱码人妻二区三区 | 台湾佬美性中文娱乐网 | 最新视频在线观看 | 午夜精品一区二 | 日韩大片在线观看 | 尤物视频最新网址 | 国产麻豆免费视频 | 夜夜夜操 | 日韩一级黄 | 97久久久久 | 欧美日韩综合 | 欧美日韩一区二区三区在线 | 男女一起插插插 | 性生交大片免费看 | 91黄色片| 91视频插插插 |