一、配置管理
1.添加一個新的命名空間
這里我都填寫為publicdemo
2.C#代碼配置啟動
appsetting.json加上:
(nacos默認是8848端口)
? "NacosConfig": {"ServerAddresses": [ "http://localhost:8848" ], // Nacos 服務器地址"Namespace": "publicdemo" // 命名空間}
startup.cs加上(方式一和方式二任選):
public void ConfigureServices(IServiceCollection services)
{services.AddControllers();// 加載 Nacos 配置,啟用 Nacos 服務發現//方式一: 需要先在appsetting.json中配置好services.AddNacosV2Config(Configuration, null, "NacosConfig");services.AddNacosV2Naming(Configuration, null, "NacosConfig");//方式二:直接將配置寫在這里//services.AddNacosV2Config(x =>//{// x.ServerAddresses = new System.Collections.Generic.List<string> { "http://localhost:8848/" };// x.EndPoint = "";// x.Namespace = "publicdemo";//});//services.AddNacosV2Naming(x =>//{// x.ServerAddresses = new System.Collections.Generic.List<string> { "http://localhost:8848/" };// x.EndPoint = "";// x.Namespace = "publicdemo";//});
}
3.C#WebApi接口實現配置增加/查詢/刪除
這里設置我們的dataId、group、value!
namespace WebApplication1.Controllers
{[ApiController][Route("[controller]")]public class Demo{private readonly INacosConfigService _ns;public Demo(INacosConfigService ns){_ns = ns;}[HttpPost][Route(nameof(PublishConfig))]public async Task<string> PublishConfig(INacosConfigService svc){var dataId = "demo-dateid";var group = "demo-group";var val = "test-value-" + DateTimeOffset.Now.ToString();await Task.Delay(500);var flag = await svc.PublishConfig(dataId, group, val);return $"發布配置結果,{flag}";}[HttpPost][Route(nameof(GetConfig))]public async Task<string> GetConfig(INacosConfigService svc){var dataId = "demo-dateid";var group = "demo-group";await Task.Delay(500);var config = await svc.GetConfig(dataId, group, 5000L);return $"獲取配置結果,{config}";}[HttpPost][Route(nameof(RemoveConfig))]public async Task<string> RemoveConfig(INacosConfigService svc){var dataId = "demo-dateid";var group = "demo-group";await Task.Delay(500);var flag = await svc.RemoveConfig(dataId, group);return $"刪除配置結果,{flag}";}/// <summary>/// 測試/// </summary>/// <returns></returns>[HttpPost][Route(nameof(GetInfoListAsync))]public async Task GetInfoListAsync(){await PublishConfig(_ns);await GetConfig(_ns);await RemoveConfig(_ns);}}
}
4.結果檢驗
選擇正確的命名空間?
找到我們的DataId,點擊詳情?
?5.操作總結
若需要還原為舊的配置,可在【歷史版本】-【回滾】中操作?
6.補充說明
1.用WebAPI增刪改后,不重啟情況下,可以利用WebAPI或UI界面查到最新數據
2.用UI界面增刪改后,不重啟情況下,可以利用WebAPI或UI界面查到最新數據
二、服務管理
1.服務的注冊、查詢、注銷
[ApiController][Route("[controller]")]public class Demo{private readonly INacosConfigService _ns;public Demo(INacosConfigService ns){_ns = ns;}[HttpPost][Route(nameof(RegisterInstance))]public async Task<string> 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("demo-svc1", "DEFAULT_GROUP", instace);return $"注冊實例成功";}[HttpPost][Route(nameof(GetAllInstances))]public async Task<string> GetAllInstances(INacosNamingService svc){await Task.Delay(500);// 獲取全部實例有很多重載,選適合自己的即可。最后一個參數表明要不要訂閱這個服務// SelectInstances, SelectOneHealthyInstance 是另外的方法可以獲取服務信息。var list = await svc.GetAllInstances("demo-svc1", "DEFAULT_GROUP", false);return $"獲取實例成功,{Newtonsoft.Json.JsonConvert.SerializeObject(list)}";}[HttpPost][Route(nameof(DeregisterInstance))]public async Task<string> DeregisterInstance(INacosNamingService svc){await Task.Delay(500);// 注銷實例有很多重載,選適合自己的即可。await svc.DeregisterInstance("demo-svc1", "DEFAULT_GROUP", "127.0.0.1", 9999);return $"注銷實例成功";}}
2.UI查詢結果
3.功能效果
????????如果 WebAPI 宕機了,Nacos 會根據健康檢查機制檢測到該服務實例不可用,并將其從注冊列表中移除。
4.自動注冊
????????自動注冊避免每次啟動都需人工調用接口,提升服務管理效率,保證高可用性與靈活擴展,降低運維成本。
public class Startup
{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddControllers();services.AddNacosV2Config(Configuration, null, "NacosConfig");services.AddNacosV2Naming(Configuration, null, "NacosConfig");}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}NacosAutoRegister(app);//增加這個方法app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}// 在應用啟動時自動注冊實例private void NacosAutoRegister(IApplicationBuilder app){var svc = app.ApplicationServices.GetRequiredService<INacosNamingService>();//獲取服務var port = 9999;var instance = new 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 Dictionary<string, string>{{ "m1", "v1" },{ "m2", "v2" }}};// 服務調用,自動注冊實例svc.RegisterInstance("demo-svc1", "DEFAULT_GROUP", instance).Wait();}
}