Net6集成Nacos实现服务注册


Nacos安装
nacos-sdk-csharp Nuget包作者博客

一、服务注册

1.创建WebAPI项目

在这里插入图片描述

2.安装Nuget包

nacos-sdk-csharp
nacos-sdk-csharp.AspNetCore
nacos-sdk-csharp.Extensions.Configuration
nacos-sdk-csharp.IniParser
nacos-sdk-csharp.YamlParser
Swashbuckle.AspNetCore

3.注册Nacos

builder.Services.AddNacosAspNet(builder.Configuration);

Nacos配置文件(放在Appsetting.json或其他文件中)

  "nacos": {
    "EndPoint": "",
    "ServerAddresses": [ "http://127.0.0.1:8848" ],
    "DefaultTimeOut": 15000,
    "Namespace": "ec934a6e-36f5-4f1a-90f4-b74824da42a2",
    "ListenInterval": 1000,
    "ServiceName": "BaseApi",
    "GroupName": "DEFAULT_GROUP",
    "ClusterName": "DEFAULT",
    "Ip": "",
    "PreferredNetworks": "",
    "Port": 0,
    "Weight": 100,
    "RegisterEnabled": true,
    "InstanceEnabled": true,
    "Ephemeral": true,
    "Secure": false,
    "AccessKey": "",
    "SecretKey": "",
    "UserName": "",
    "Password": "",
    "ConfigUseRpc": true,
    "NamingUseRpc": false,
    "NamingLoadCacheAtStart": "",
    "LBStrategy": "WeightRandom",
    "Metadata": {
      "aa": "bb",
      "cc": "dd"
    }

  }

4.创建Api控制器

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace NacosService.Controllers
{
    [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 = $"{"127.0.0.1"}:{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();
        }
    }
}

5.运行效果

在这里插入图片描述

在这里插入图片描述

二、注册多个服务

启动Nacos

startup.cmd -m standalone

启动项目,因为要启动多个项目,所以通过CMD在不同端口启动项目

dotnet yourapp.dll --urls=http://localhost:yourport

在这里插入图片描述

开启三个项目
dotnet DesignMode.dll --urls=http://127.0.0.1:5001
dotnet DesignMode.dll --urls=http://127.0.0.1:5000
dotnet DesignMode.dll --urls=http://127.0.0.1:5003

查看项目注册效果

在这里插入图片描述

三、配置中心

参考文章一
参考文章二

1.设置配置

设置如下配置信息

在这里插入图片描述

2.读取配置

注册配置中心

//添加配置中心
builder.Host.ConfigureAppConfiguration((context, builder) =>
{
    var config = builder.Build();
    builder.AddNacosV2Configuration(config.GetSection("NacosConfig"));
});

appsetting.json文件下增加如下配置信息

  "NacosConfig": {
    "Listeners": [
      {
        "Optional": false,
        "DataId": "Test01",
        "Group": "20231019"
      }
    ],
    "Optional": false,
    "Namespace": "ec934a6e-36f5-4f1a-90f4-b74824da42a2",
    "ServerAddresses": [ "http://127.0.0.1:8848/" ]
  }

通过Configuration读取Nacos的配置信息

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace NacosService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly Nacos.V2.INacosNamingService _svc;
        private readonly IConfiguration _configuration;
        public ValuesController(
            Nacos.V2.INacosNamingService svc, 
            IConfiguration configuration)
        {
            _svc = svc;
            _configuration = configuration;
        }

        [HttpGet]
        public string Get()
        {
            return "Ok~" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
        }

        [HttpGet]
        [Route("GetConfig")]
        public string GetConfig()
        {
            var appName = _configuration["Name"];
            return appName;
        }

    }
}

3.展示效果

在这里插入图片描述

4.设置多个配置项

添加三个配置选项

在这里插入图片描述

添加如下三个监听

 "NacosConfig": {
    "Listeners": [
      {
        "Optional": false,
        "DataId": "Test01",
        "Group": "20231019"
      },
      {
        "Optional": false,
        "DataId": "Test02",
        "Group": "20231019"
      },
      {
        "Optional": false,
        "DataId": "Test03",
        "Group": "20231020"
      }
    ],
    "Optional": false,
    "Namespace": "ec934a6e-36f5-4f1a-90f4-b74824da42a2",
    "ServerAddresses": [ "http://127.0.0.1:8848/" ]
  }

分别获取三个配置项中的配置

   [HttpGet]
        [Route("GetConfig")]
        public string GetConfig()
        {
            var Test01 = _configuration["Name"];
            var Test02 = _configuration["Name2"];
            var Test03 = _configuration["Address"];
            return "Test01: "+Test01 + "   "+"Test02:"+Test02 + "   "+"Test03:" +Test03;
        }

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有诗亦有远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值