赞
踩
1、添加api项目并注册到服务中心
nacos服务端需要自己下载安装,请参照官方文档
地址:什么是 Nacos
下载完成后,按照文档提示启动Nacos,在浏览器查看控制台:Nacos本地链接
1.1、根据需要安装nuget
- dotnet add package nacos-sdk-csharp
- dotnet add package nacos-sdk-csharp.AspNetCore
- dotnet add package nacos-sdk-csharp.Extensions.Configuration
- dotnet add package nacos-sdk-csharp.YamlParser
- dotnet add package nacos-sdk-csharp.IniParser
1.2、在program.cs中添加服务
-
- //builder
- using Nacos.AspNetCore.V2;
-
-
- var builder = WebApplication.CreateBuilder(args);
- {
- // Add services to the container.
- // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
- builder.Services.AddEndpointsApiExplorer();
- builder.Services.AddSwaggerGen();
- builder.Services.AddMvc(option => { option.EnableEndpointRouting = false; });
-
- // nacos server v1.x or v2.x
- builder.Services.AddNacosAspNet(builder.Configuration);
-
- }
-
-
-
- //app
- var app = builder.Build();
- {
- // Configure the HTTP request pipeline.
- if (app.Environment.IsDevelopment())
- {
- app.UseSwagger();
- app.UseSwaggerUI();
- }
-
- app.UseMvcWithDefaultRoute();
- app.Run();
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
1.3、在appsettings.json中添加nacos节点
- "nacos": {
- "EndPoint": "",
- "ServerAddresses": [ "http://localhost:8848" ],
- "DefaultTimeOut": 15000,
- "Namespace": "public",
- "ListenInterval": 1000,
- "ServiceName": "BaseApi", // your service name
- "GroupName": "DEFAULT_GROUP",
- "ClusterName": "DEFAULT",
- "Ip": "",
- "PreferredNetworks": "", // select an IP that matches the prefix as the service registration IP
- "Port": 0,
- "Weight": 100,
- "RegisterEnabled": true,
- "InstanceEnabled": true,
- "Ephemeral": true,
- "Secure": false,
- "AccessKey": "",
- "SecretKey": "",
- "UserName": "",
- "Password": "",
- "ConfigUseRpc": true,
- "NamingUseRpc": false,
- "NamingLoadCacheAtStart": "",
- "LBStrategy": "WeightRandom", //WeightRandom WeightRoundRobin
- "Metadata": {
- "aa": "bb",
- "cc": "dd"
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
1.4、添加你的api控制器
- using Microsoft.AspNetCore.Mvc;
-
- namespace BaseApi
- {
- [Route("api/[controller]")]
- [ApiController]
- public class ValuesController : ControllerBase
- {
- private readonly Nacos.V2.INacosNamingService _svc;
-
- public ValuesController(Nacos.V2.INacosNamingService svc)
- {
- _svc = svc;
- }
-
- [HttpGet]
- public string Get()
- {
- return "Ok~" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
- }
-
- /// <summary>
- /// 从nacos中获取服务并选一个调用
- /// </summary>
- /// <returns></returns>
- [HttpGet("test")]
- public async Task<string> Test()
- {
- // 这里需要知道被调用方的服务名
- var instance = await _svc.SelectOneHealthyInstance("BaseApi", "DEFAULT_GROUP");
- var host = $"{instance.Ip}:{instance.Port}";
-
- var baseUrl = instance.Metadata.TryGetValue("secure", out _)
- ? $"https://{host}"
- : $"http://{host}";
-
- if (string.IsNullOrWhiteSpace(baseUrl))
- {
- return "empty";
- }
-
- var url = $"{baseUrl}/api/values";
-
- using var client = new HttpClient();
- var result = await client.GetAsync(url);
- return await result.Content.ReadAsStringAsync();
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
1.5、启动你的Net6服务,可以启动多个(本地的话用不同的端口)
1.6、打开Nacos服务端,查看服务注册的服务
nacos服务地址:Nacos本地链接
可以看到已注册到服务中心
1.7、测试服务调用
2、配置管理和手动注册服务
2.1、配置管理
2.1.1、添加配置服务
- //用于管理Nacos的配置的信息
- builder.Services.AddNacosV2Config(x =>
- {
- x.ServerAddresses = new System.Collections.Generic.List<string> { "http://localhost:8848/" };
- x.EndPoint = "";
- x.Namespace = "public";
- x.UserName = "nacos";
- x.Password = "nacos";
-
- // this sample will add the filter to encrypt the config with AES.
- x.ConfigFilterAssemblies = new System.Collections.Generic.List<string> { "BaseApi" };
-
- // swich to use http or rpc
- x.ConfigUseRpc = false;
- });
2.1.2添加配置管理控制器
- using Microsoft.AspNetCore.Mvc;
- using Nacos.V2;
-
- namespace UpService
- {
-
- /// <summary>
- /// 操作配置信息
- /// </summary>
- [ApiController]
- [Route("api/[controller]")]
- public class ConfigController : ControllerBase
- {
- private readonly IConfiguration _configuration;
- private readonly INacosConfigService _svc;
-
- public ConfigController(IConfiguration configuration, INacosConfigService svc)
- {
- _configuration = configuration;
- _svc = svc;
- }
-
- [HttpGet("get")]
- public async Task<string> Get(string dataId= "default-dev.yaml")
- {
- var res = await _svc.GetConfig(dataId, "DEFAULT_GROUP", 3000).ConfigureAwait(false);
-
- return res ?? "empty config";
- }
-
- [HttpGet("set")]
- public async Task<bool> Put(string dataId = "default-dev.yaml")
- {
- var res = await _svc.PublishConfig(dataId, "DEFAULT_GROUP", "test:demo-0001").ConfigureAwait(false);
-
- return res;
- }
-
- [HttpGet("listener")]
- public async Task<string> Listen(string dataId = "default-dev.yaml")
- {
- await _svc.AddListener(dataId, "DEFAULT_GROUP", _configListen).ConfigureAwait(false);
- return "ok";
- }
-
- [HttpGet("unlistener")]
- public async Task<string> UnListen(string dataId = "default-dev.yaml")
- {
- await _svc.RemoveListener(dataId, "DEFAULT_GROUP", _configListen).ConfigureAwait(false);
-
- return "ok";
- }
-
- private static readonly CusConfigListen _configListen = new ();
-
- public class CusConfigListen : Nacos.V2.IListener
- {
- public void ReceiveConfigInfo(string configInfo)
- {
- System.Console.WriteLine("config updating " + configInfo);
- }
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
2.2手动注册服务管理服务
2.2.1、添加手动注册服务管理服务
- //用于添加临时服务
- builder.Services.AddNacosV2Naming(x =>
- {
- x.ServerAddresses = new System.Collections.Generic.List<string> { "http://localhost:8848/" };
- x.EndPoint = "";
- x.Namespace = "public";
-
- // swich to use http or rpc
- x.NamingUseRpc = false;
- });
2.2.2、添加手动注册服务控制器
- using Microsoft.AspNetCore.Mvc;
- using Nacos.V2.Utils;
-
- namespace UpService
- {
-
- /// <summary>
- /// 手动操作服务实例-增删监听
- /// </summary>
- public class NamingController : Controller
- {
-
- private readonly Nacos.V2.INacosNamingService _client;
-
- public NamingController(Nacos.V2.INacosNamingService client)
- {
- _client = client;
- }
-
- // GET n/g
- [HttpGet("GetAllInstances")]
- public async Task<string> GetAllInstances()
- {
- var list = await _client.GetAllInstances("MyService1", false).ConfigureAwait(false);
-
- var res = list.ToJsonString();
-
- return res ?? "GetAllInstances";
- }
-
- // GET n/r
- [HttpGet("RegisterInstance")]
- public async Task<string> RegisterInstance()
- {
- // await _client.RegisterInstance("mysvc", "127.0.0.1", 9635);
- var instance = new Nacos.V2.Naming.Dtos.Instance
- {
- Ip = "127.0.0.1",
- Ephemeral = true,
- Port = 5088,
- ServiceName = "mysvc2"
- };
-
- await _client.RegisterInstance("MyService1", instance).ConfigureAwait(false);
-
- return "RegisterInstance ok";
- }
-
- // GET n/r2
- [HttpGet("RegisterInstance2")]
- public async Task<string> RegisterInstance2()
- {
- // await _client.RegisterInstance("mysvc", "127.0.0.1", 9635);
- var instance = new Nacos.V2.Naming.Dtos.Instance
- {
- Ip = "127.0.0.1",
- Ephemeral = true,
- Port = 5089,
- ServiceName = "MyService1"
- };
-
- await _client.RegisterInstance("MyService1", instance).ConfigureAwait(false);
-
- return "RegisterInstance ok";
- }
-
- // GET n/dr
- [HttpGet("DeregisterInstance")]
- public async Task<string> DeregisterInstance()
- {
- // await _client.RegisterInstance("mysvc", "127.0.0.1", 9635);
- var instance = new Nacos.V2.Naming.Dtos.Instance
- {
- Ip = "127.0.0.1",
- Ephemeral = true,
- Port = 9562,
- ServiceName = "mysvc2"
- };
-
- await _client.DeregisterInstance("mysvc2", instance).ConfigureAwait(false);
-
- return "DeregisterInstance ok";
- }
-
- // GET n/si
- [HttpGet("SelectInstances")]
- public async Task<string> SelectInstances()
- {
- var list = await _client.SelectInstances("mysvc2", true, false).ConfigureAwait(false);
-
- var res = list.ToJsonString();
-
- return res ?? "SelectInstances ok";
- }
-
- // GET n/gs
- [HttpGet("GetServicesOfServer")]
- public async Task<string> GetServicesOfServer()
- {
- var list = await _client.GetServicesOfServer(1, 10).ConfigureAwait(false);
-
- var res = list.ToJsonString();
-
- return res ?? "GetServicesOfServer";
- }
-
- // GET n/sub
- [HttpGet("Subscribe")]
- public async Task<string> Subscribe()
- {
- await _client.Subscribe("mysvc2", listener).ConfigureAwait(false);
- return "Subscribe";
- }
-
- // GET n/unsub
- [HttpGet("Unsubscribe")]
- public async Task<string> Unsubscribe()
- {
- await _client.Unsubscribe("mysvc2", listener).ConfigureAwait(false);
- return "UnSubscribe";
- }
-
- // NOTE: MUST keep Subscribe and Unsubscribe to use one instance of the listener!!!
- // DO NOT create new instance for each opreation!!!
- private static readonly CusListener listener = new ();
-
- public class CusListener : Nacos.V2.IEventListener
- {
- public Task OnEvent(Nacos.V2.IEvent @event)
- {
- if (@event is Nacos.V2.Naming.Event.InstancesChangeEvent e)
- {
- System.Console.WriteLine("CusListener");
- System.Console.WriteLine("ServiceName" + e.ServiceName);
- System.Console.WriteLine("GroupName" + e.GroupName);
- System.Console.WriteLine("Clusters" + e.Clusters);
- System.Console.WriteLine("Hosts" + e.Hosts.ToJsonString());
- }
-
- return Task.CompletedTask;
- }
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
官方地址:Nacos快速开始
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。