微服务设计之.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的注册与发现功能,具体的性能、与其它服务注册与发现的组件对比暂时没有,这个需要在生产中深入使用,解决实际问题才能体会不一样,否则都是咀嚼他人的实践,二手知识。在集成中注意版本号信息,学会阅读源码来解决问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?