微服务设计之.net core使用nacos的注册中心

一、前言

  近期在使用java的spring框架构建微服务系统,对于微服务的服务注册与发现使用nacos做了一定了解,尝试在.net中构建微服务使用nacos作为服务的注册与发现。通过实践Demo学习nacos是如何集成到asp.net core中,体会服务注册与发现组件在微服务中的重要性,后续会实践在asp.net core构建微服务比较流行的consul进行服务注册与发现,对比两者的优缺点。

二、naocs安装

  nacos是实现动态服务发现、配置管理和服务管理平台的项目,由阿里内部实践多年并且开源,开源地址https://github.com/alibaba/nacos。基于Windows安装,从https://github.com/alibaba/nacos或者https://github.com/alibaba/nacos/releases下载编译好的服务端安装包或者源代码,解压安装包,在bin启动脚本文件中通过cmd或者sh脚本命令运行服务端、将服务注册成windows系统服务或者使用nssm注册成系统服务;config配置文件中配置端口和持久化服务数据库连接字符。如果运行成功则在浏览器访问http://127.0.0.1:8848/nacos/index.html,默认账户密码nacos。如下图所示:

三、nacos集成

   在完成服务端安装后开始在asp.net core中集成nacos,因为nacos是基于java开发的项目,所以在asp.net core使用要安装相关类库来实现,得益于社区大佬贡献精神对nacos集成开源了类库名称nacos-sdk-csharp的项目,开源地址是https://github.com/nacos-group/nacos-sdk-csharp。

  第一步:在VS创建一个解决方案tqf.网关(网关、服务注册中心、服务配置中心),然后在解决方案中新增几个asp.net core的WebApi项目模拟服务。项目结构如下所示:

  

  其中一个控制台应用程序(tqf.client.test)作为测试,一个类库项目(tqf.nacos.common,定义接口服务契约),五个WebApi项目tqf.gateway.ocelotDemo是网关后续章节介绍,tqf.identityService是统一认证授权服务后续章节介绍,tqf.system.webapi、tqf.product.webapi、tqf.gateway.nacos三个是实际应用中的微服务项目。所以整个解决方案可以理解学习微服务的网关、服务注册与发现、配置中心、统一认证授权的解决方案,通过这个解决方案实践、掌握这些内容。

  第二步、在项目中引入使用nacos服务的类库,配置相关文件,配置nacos网页端。首先选择类库的版本,在VS的nuget程序包管理器中查找类库,安装到tqf.system.webapi、tqf.product.webapi、tqf.gateway.nacos项目中,注意多个类库版本兼容,类库与.net框架的兼容问题,这里统一选择1.3.1的版本,如下所示:

主要引入nacos-sdk-charp、nacos-sdk-csharp.AspNetCore、nacos-sdk-charp.Extensions.Configuration三个包,在VS上安装该包或者通过命令端安装包默认最新版本号,如下所示:

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
注意,在使用时注意版本,可能老版本的使用方式在新版本中不在兼容导致报错、编译失败或者抛出异常,所以要清楚版本号,或者在github中查找相关版本发布信息、或查看源码来解决问题地址https://github.com/nacos-group/nacos-sdk-csharp

  第三步、添加配置、编写代码,asp.net core的引入一个组件的步骤基本是添加涉及组件的配置、组件服务注入、然后启用中间件三步操作,在上述三个项目代码配置基本一致。

  1、在appsettings.json配置文件中添加如下配置

复制代码
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "NacosConfig": {
    "Listeners": [
      {
        "Optional": false,
        "DataId": "NacosServiceB",
        "Group": "DEFAULT_GROUP"
      }
    ],
    "Namespace": "",
    "ServerAddresses": [ "http://172.16.66.118:8848/" ],
    "UserName": "nacos",
    "Password": "nacos",
    "EndPoint": "",
    "ConfigUseRpc": false,
    "NamingUseRpc": false
  }
}
复制代码

其中NacosConfig为nacos的配置,主要是DataId(数据Id寻找服务配置文件)、Group(分组)、Namespace命名空间、ServiceAddresses服务注册到的nacos服务端地址(允许集群模式)。

  2、在nacos服务端新建服务的配置信息,通过配置中心(后续介绍)提供配置数据,如下图所示:

复制代码
{
  "nacos": {
    "EndPoint": "",
    "ServerAddresses": [ "http://172.16.66.118:8848" ],
    "DefaultTimeOut": 15000,
    "Namespace": "public",
    "ListenInterval": 1000,
    "ServiceName": "nacosservicea",
    "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": true,
    "NamingLoadCacheAtStart": "",
    "LBStrategy": "WeightRandom",
    "Metadata": {
      "aa": "bbb",
      "cc": "ddd"
    }
  },
  "redis":{
    "ConnectionStrings":"127.0.0.1:6368"
  }
}
复制代码

  一个服务对应一个配置文件,配置内容如上包括nacos的注册中心的地址、服务的名称、权重、元数据、redis配置等内容。

  3、在项目中编写代码,注册配置中心、注册中心的服务、启用中间件,如下所示:

复制代码
using Nacos.AspNetCore.V2;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

//配置中心
builder.Configuration.AddNacosV2Configuration(builder.Configuration.GetSection("NacosConfig"));

//服务注册
builder.Services.AddNacosAspNet(builder.Configuration);

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
复制代码

完成上述操作,启动三个项目,然后在http://127.0.0.1:8848/nacos/index.html中查看服务是注入成功,如下所示:

  通过使用.net core的命令在项目根目录中cmd运行dotnet build/dotnet run启动项目,然后在nacos服务端查看是否注入成功,如上是三个服务的服务名称,运行实例数情况。到此就完成服务注册的功能。

四、总结

   通过实践这个nacos的集成,学习了nacos的注册与发现功能,具体的性能、与其它服务注册与发现的组件对比暂时没有,这个需要在生产中深入使用,解决实际问题才能体会不一样,否则都是咀嚼他人的实践,二手知识。在集成中注意版本号信息,学会阅读源码来解决问题。

posted @   tuqunfu  阅读(814)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示