什么是Nacos
是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
环境与版本
Linux:CentOS 8.0 64bit
Nacos:2.0.4
一、安装java jdk
1、安装包:yum install java-1.8.0-openjdk* 2、查看版本:java -version
二、单机版下载&解压/安装Nacos
1、安装Nacos方式有两种:
第一种:通过wget命令直接安装(可自行百度)
第二种:是通过git地址去下载安装包,然后用远程链接工具上川岛linux服务器文件夹,此次由于版本问题,我采用了第二种下载包的方式(https://github.com/alibaba/nacos/releases/tag/2.0.4),
由于第一次学习安装是使用的2.0.3版本,但是后面创建的时候一直无法创建服务,所有又切换到2.0.4版本,所以截图说明都是基于2.0.3版本进行的。
下载完成后可以在linux中opt或者usr文件夹下创建新的文件夹便于识别。创建成功后,上传压缩包到文件夹,然后解压压缩文件。
解压命令:tar -xvf nacos-server-2.0.4.tar.gz
2、配置mysql查找到nacos-mysql
进入解压文件下的conf文件夹,查找到nacos-mysql.sql文件,打开文件并执行里面的sql语句
或者工具中查看
3、执行sql
4、conf文件夹下找到application.properties修改数据库链接配置,可以通过vim方式修改,也可以通过工具直接进行修改保存
5、修改完成后进入进入nacos的bin目录下
cd /xxxx/xxxx/xxxx/nacos/bin
6、启动/停止nacos,启动命令(standalone代表着单机模式运行,非集群模式)
启动:sh bin/startup.sh -m standalone
停止:sh bin/shutdown.sh
7、启动成功后,在nacos的logs文件夹下有一个start.out文件,可查看服务启动结果
提示指向8848端口成功并且提示successfully表示部署成功。
启动完成后输入 http://服务器IP:8848/nacos 即可进入nacos控制台,账号nacos,密码nacos
三、Nacos部署集群
1、#进入安装目录conf
例如:cd /opt/cloud/nacos/conf
2、cp application.properties.example 为 application.properties
#复制文件cluster.conf.example重新命名为cluster.conf cp cluster.conf.example cluster.conf
3、进入cluster.conf文件新定义集群访问IP
4、若为Nacos集群,需要部署多份文件,可直接通过工具或者命令拷贝一份文件。进入文件的conf文件夹找到application.properties,修改端口
5、启动集群,集群启动方式和单机启动方式有一点区别,集群启动方式是切断到nacos文件夹的bin目录执行命令
启动命令:sh startup.sh 停止命令:sh shutdown.sh
到此为止,集群部署完毕,可以通过start.out日志查看各个集群启动 状态。若都启动成功,即可访问。
四、.NET 6接入Nacos
1、进入nacos后台管理添加命名空间,用于项目创建服务时使用
2、添加依赖包
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
3、配置appsettings.json,在appsettings.json中新增nacos节点
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", /*---Nacos配置(开始)---*/ //"NacosConfig": { // "Listeners": [ // { // "Optional": false, // "DataId": "", //nacos上面的 Data Id // "Group": "DEFAULT_GROUP" //nacos上面的 Group 名 // } // ], // "Namespace": "059ae542-419f-4299-ae71-38a63b9a235a", //nacos上面的 Namespace 名 // "ServerAddresses": ["http://ip:8848","http://ip:8850"], //nacos上的ip节点,可以配置多个,用逗号隔开 // "UserName": "", //可以不填 // "Password": "", //可以不填 // "AccessKey": "", // "SecretKey": "", // //"EndPoint": "acm.aliyun.com",//如果nacos上面的配置详情的配置内容是空的json内容,例如:{} ,这里如果填了值,代码就会报错,这个一个大坑,被坑哭了。最好把它注释掉,留空既不会影响本地,也不会影响nacos上的,也会优先读取nacos上的json文件。 // "ConfigFilterAssemblies": [ "YouPrefix.AssemblyName" ], //官方文档默认复制过来的 // "ConfigFilterExtInfo": "some ext infomation" //官方文档默认赋值过来的 //}, "nacos": { "EndPoint": "", //和上面的解释一样,最好留空,不然很容易报错。 "ServerAddresses": [ "http://ip:8848"],//可多个,正常情况一个也够使用 "DefaultTimeOut": 15000, "Namespace": "61c8ea59-f314-4926-84ae-22e580398678",//新增的命名空间ID "ListenInterval": 10000, "ServiceName": "nacostest", //往nacos服务注册的服务名,自己定义的,喜欢用那个名字就用哪个 "GroupName": "DEFAULT_GROUP", "ClusterName": "DEFAULT", "Ip": "服务器ip", //项目部署IP如,多个项目集群部署时修改IP和端口 "PreferredNetworks": "", // select an IP that matches the prefix as the service registration IP "Port": 8852, //往nacos服务注册的服务端口 "Weight": 100, "RegisterEnabled": true, "InstanceEnabled": true, "Ephemeral": true, "Secure": false, "AccessKey": "", "SecretKey": "", "UserName": "nacos", "Password": "chennacos", "ConfigUseRpc": true, "NamingUseRpc": false, "NamingLoadCacheAtStart": "", "LBStrategy": "WeightRandom", //WeightRandom WeightRoundRobin "Metadata": { "aa": "bb", "cc": "dd" } } /*---Nacos配置(结束)---*/ }
4、添加配置服务,nacos为appsettings.json中的配置节点
5、启动项目即自动创建服务
进入服务详情,可以看到当前服务的IP和端口信息,注意,无论是服务列表还是服务详情里面的IP信息列表:淡绿色为正常服务,淡黄色为不正常服务
非正常服务
四、.NET 6读取Nacos服务
1、新增控制器,控制器名称自定义,实现INacosNamingService接口
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Nacos.V2; namespace NacosTest.Controllers { [Route("api/[controller]")] [ApiController] public class NacosController : ControllerBase { private readonly INacosNamingService _nacosNamingService; public NacosController(INacosNamingService nacosNamingService) { _nacosNamingService = nacosNamingService; } [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() { // 获取服务配置nacostest-服务名称,DEFAULT_GROUP-服务默认组 var instance = await _nacosNamingService.SelectOneHealthyInstance("nacostest", "DEFAULT_GROUP"); //拼接服务IP和端口 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/nacos"; //请求测试代码 using var client = new HttpClient(); var result = await client.GetAsync(url); return await result.Content.ReadAsStringAsync(); } } }
到此为止,Nacos初步尝试已经完成,需要注意的是,一个服务可以注入添加到多个服务器里面,在appsettings.json的nacos节点ServerAddresses中数组以逗号的方式隔开注入。
同时若一个项目需要注册多个Nacos,只需要修改在appsettings.json的nacos节点的IP和Port即可,服务名称和其他信息不变。
标签:服务,部署,IP,平台,Nacos,nacos,sh,conf From: https://www.cnblogs.com/chj929555796/p/16975797.html