net6 core 接入nacos 实现服务注册入门使用,心跳检测和负载均衡
配置中心比较Apollo与Nacos_appollo 和 nacos-CSDN博客
一:安装nacos
Release 2.2.3 (May 25th, 2023) · alibaba/nacos · GitHub
二、配置Nacos
注*Nacos 是使用的mysql 数据库,需要先自行安装好数据库
1.在mysql中创建数据库:库名一定要是:nacos_config 字符集跟排序规则默认为空,没有特殊要求
2.解压出上面下载的压缩包,nacos下conf文件夹,在nacos_config数据库中执行数据库脚本:derby-schema.sql
mysql-schema.sql
数据库脚本执行完成刷新表,看到如下时,就成功啦!
三.配置连接
打开conf文件夹下的 application.properties 文件 修改如下配置,其余的不要动,修改完成保存。
回到上一级,进入bin目录,在bin目录下cmd 执行 startup -m standalone 命令即可启动nacos。
如果提示没有安装java包,请自行按下面的java安装。
如上图,启动成功,默认端口是8848 我们打开浏览器访问: http://192.168.56.1:8848/nacos/index.html
四:安装java 环境
windows 安装jdk 相关坑 java jdk1.8.0_221 安装步骤_this version of the jdk-CSDN博客
五、NETCORE对接nacos 实现服务注册与发现以及负载均衡
1、配置Nacos
服务对接之前,先在nacos上添加配置文件 打开nacos的web网页
1.1 配置命名空间
1.2 对命名空间配置参数
选择 配置列表 选中刚才添加的命名空间 点击最左侧 + 号
填入参数 点击发布,json串可以直接填入 注意填入的时候把注释去掉
把localhost 改成实际你的nacos页面访问的ip地址
Namespace:命名空间ID 可以从左侧 命名空间菜单查看
ServiceName:服务名,自己定义 不要重复哦
Namespace
{
"nacos": {
"ServerAddresses": [ "http://192.168.56.1:8848/" ],
"DefaultTimeOut": 15000,
"Namespace": "23b63b57-c762-4778-b141-4d16db969984",
"ListenInterval": 1000,
"ServiceName": "UserService",
"GroupName": "DEFAULT_GROUP",
"ClusterName": "DEFAULT",
"RegisterEnabled": true,
"InstanceEnabled": true,
"Ephemeral": true,
"ConfigUseRpc": true,
"NamingUseRpc": true,
"LBStrategy": "WeightRoundRobin"
}
}
六:code net6 代码
6.netcore 接入nacos 实现服务注册与心跳检测
6.1 创建一个netcore webapi项目
引入两个nuget nacos-sdk-csharp.Extensions.Configuration nacos-sdk-csharp.AspNetCore
注册 nacos :
// 注册服务到Nacos
builder.Services.AddNacosAspNet(builder.Configuration); //默认节点Nacos
// 添加配置中心
builder.Host.ConfigureAppConfiguration((context, builder) =>
{
var config = builder.Build();
builder.AddNacosV2Configuration(config.GetSection("NacosConfig"));
});
配置配置文件:
在appsettings.json 文件中贴入下面配置
"NacosConfig": {
"Listeners": [
{
"Optional": false,
"DataId": "test01serviceconfig", //Data Id 配置列表查看 命名空间ID
"Group": "DEFAULT_GROUP"
}
],
"Optional": false,
"Namespace": "23b63b57-c762-4778-b141-4d16db969984", //命名空间查看
"ServerAddresses": [ "http://192.168.56.1:8848/" ] //你的nacos 实际访问地址
},
将下图端口设置注释 因为该配置文件优于命令行参数
完事。。。。。。
2.2 启动多个项目
右键项目 在文件资源管理器中打开文件夹 在当前文件下打开cmd窗口 你要开几个服务 就打开几个窗口 在窗口中执行 dotnet run --urls=http://*:8003 --port=8003 端口你自己定义
如下图 我开启了三个窗口 分别开启了三个服务 端口分别是 8001 8002 8003
//dotnet run --urls=http://*:8001 --port=8001
//dotnet run --urls=http://*:8002 --port=8002
//dotnet run --urls=http://*:8003 --port=8003
//http://localhost:8001/WeatherForecast
此时 我们从nacos 查看 我们启动的三个服务已经显示了 你关掉对应的服务 这里也会减少或者增加 至此 服务注册与发现 心跳检测配置完成。
六:nacos net6 实现负载均衡
{
"nacos": {
"ServerAddresses": ["http://192.168.56.1:8848"],
"DefaultTimeOut": 15000,
"Namespace": "23b63b57-c762-4778-b141-4d16db969984",
"ListenInterval": 1000,
"ServiceName": "LoadBalanceConfig",
"GroupName": "DEFAULT_GROUP",
"ClusterName": "DEFAULT",
"RegisterEnabled": true,
"InstanceEnabled": true,
"Ephemeral": true,
"ConfigUseRpc": true,
"NamingUseRpc": true,
"LBStrategy": "WeightRoundRobin"
}
}
修改项目appsettings.json文件
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"NacosConfig": {
"Listeners": [
{
"Optional": false,
"DataId": "LoadBalanceConfig", //Data Id 配置列表查看 命名空间ID
"Group": "DEFAULT_GROUP"
}
],
"Optional": false,
"Namespace": "23b63b57-c762-4778-b141-4d16db969984", //命名空间查看
"ServerAddresses": [ "http://192.168.56.1:8848/" ] //你的nacos 实际访问地址
},
"AllowedHosts": "*"
}
修改 默认控制器为
//private static readonly string[] Summaries = new[]
//{
// "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
//};
private readonly ILogger<WeatherForecastController> _logger;
private readonly INacosNamingService _nacosNaming;
public WeatherForecastController(ILogger<WeatherForecastController> logger, Nacos.V2.INacosNamingService nacosNaming)
{
_logger = logger;
_nacosNaming = nacosNaming;
}
[HttpGet]
public string Get()
{
var nacosConfig=_nacosNaming.SelectOneHealthyInstance("UserService", "DEFAULT_GROUP").GetAwaiter().GetResult();
return nacosConfig.Ip+":"+nacosConfig.Port;
}
总体来说 第一步 我们写了一个服务项目 启动了三个接口 分别为8001 8002 8003 注册到了nacos
现在我们又创建了一个新的i项目 用来请求之前的服务 如果服务能自动切换端口则 负责均衡成功。
启动当前服务 快速发起请求 实现负载均衡