1.什么是Nacos
Nacos /nɑ:kəʊs/
是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以**“服务”**为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
Nacos 支持几乎所有主流类型的**“服务”**的发现、配置和管理:
2.下载
1. 下载地址:Nacos Server 下载 | Nacos 官网
2. 我使用的是windows版本:下载稳定版
3.使用
1. 解压
linux:
unzip nacos-server-$version.zip
# 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
windows:直接解压
2.启动服务:
启动命令(standalone代表着单机模式运行,非集群模式):
进入:bin目录
linux:
sh startup.sh -m standalone
验证Nacos服务是否启动成功:进入${nacos.home}/logs/
目录下, 使用tail -f start.out
查看日志,如果看到如下日志,说明服务启动成功。
Nacos started successfully in stand alone mode. use embedded storage
windows:
startup.cmd -m standalone
启动成功
3.Nacos控制台页面
打开任意浏览器,输入地址:http://127.0.0.1:8848/nacos
,即可进入Nacos控制台页面。
4.注册服务
linux:
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
5.服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
6.发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
7.获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
8.关闭服务
linux:
sh shutdown.sh
windwos:
shutdown.cmd
或者双击shutdown.cmd运行文件。
4.Nacos Java SDK 使用
1. maven引用
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${version}</version>
</dependency>
注意:由于Nacos Java SDK在2.0版本后引入了gRPC,为了避免用户业务引入的gRPC版本不同导致冲突,使用了shaded技术将部分依赖直接封装进nacos-client中,导致nacos-client较大。 如果用户未自行引入gRPC或确认版本无冲突,希望使用纯净版的nacos-client以减小依赖,可以使用classifier来指定使用纯净版。
<properties>
<!-- 2.1.2版本以上支持纯净版客户端 -->
<nacos.version>2.4.2</nacos.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
<!-- 指定纯净版SDK -->
<classifier>pure</classifier>
</dependency>
<!-- 使用纯净版时必须要引入同版本nacos-api和nacos-common,否则可能出现运行时找不到类的问题 -->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>nacos-common</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>nacos-api</artifactId>
<version>${nacos.version}</version>
</dependency>
</dependencies>
2.初始化
Nacos 初始化SDK仅需要使用 NacosFactory
类进行不同模块的创建即可:
public static void main(String[] args) { try { String serverAddr = "localhost:8000"; //初始化配置中心的Nacos Java SDK ConfigService configService = NacosFactory.createConfigService(serverAddr); NamingService namingService = NacosFactory.createNamingService(serverAddr); } catch (NacosException e) { throw new RuntimeException(e); } }
通过配置文件加载
Properties properties = new Properties();
# 指定Nacos-Server的地址
properties.setProperty(PropertyKeyConst.SERVER_ADDR, "localhost:8848");
# 指定Nacos-SDK的命名空间
properties.setProperty(PropertyKeyConst.NAMESPACE, "${namespaceId}");
# 初始化配置中心的Nacos Java SDK
ConfigService configService = NacosFactory.createConfigService(properties);
# 初始化配置中心的Nacos Java SDK
NamingService namingService = NacosFactory.createNamingService(properties);
注意:一个Nacos Java SDK实例只能用于获取同一个命名空间下的配置和服务,如果要获取不同的命名空间下的配置或服务,需要创建不同的Nacos Java SDK实例。
3.发布配置
用于通过程序自动发布 Nacos 配置,以便通过自动化手段降低运维成本。
注意:创建和修改配置时使用的同一个发布接口,当配置不存在时会创建配置,当配置已存在时会更新配置。
public boolean publishConfig(String dataId, String group, String content) throws NacosException;
public boolean publishConfig(String dataId, String group, String content, String type) throws NacosException;
请求参数
参数名 | 参数类型 | 描述 |
---|---|---|
dataId | string | 配置 ID,采用类似 package.class (如 com.taobao.tc.refund.log.level )的命名规则保证全局唯一性。建议根据配置的业务含义来定义 class 部分。全部字符均为小写。只允许英文字符和 4 种特殊字符(“.”、“:”、“-”、“_”),不超过 256 字节。 |
group | string | 配置分组,建议填写产品名:模块名 (如 Nacos:Test )来保证唯一性。只允许英文字符和 4 种特殊字符(“.”、“:”、“-”、“_”),不超过 128 字节。 |
content | string | 配置内容,不超过 100K 字节。 |
type | string | @Since 1.4.1. 配置类型,见 com.alibaba.nacos.api.config.ConfigType ,默认为TEXT |
返回参数
参数类型 | 描述 |
---|---|
boolean | 是否发布成功 |
请求示例
public static void main(String[] args) { //发布配置 publishConfig(); } public static ConfigService createConfigService(){ try { String serverAddr = "localhost:8848"; //初始化配置中心的Nacos Java SDK ConfigService configService = NacosFactory.createConfigService(serverAddr); return configService; } catch (NacosException e) { throw new RuntimeException(e); } }/** * 发布配置 */ public static void publishConfig(){ try { ConfigService configService = createConfigService(); String dataId = "com.example.nacos-demo"; String group = "nacos-demo"; String content = "测试"; boolean isPublishOk = configService.publishConfig(dataId, group, content ); System.out.println(isPublishOk); } catch (NacosException e) { e.printStackTrace(); } }
返回:true
4.获取配置
用于服务启动的时候从 Nacos 获取配置。
public String getConfig(String dataId, String group, long timeoutMs) throws NacosException
请求参数
参数名 | 参数类型 | 描述 |
---|---|---|
dataId | string | 配置 ID,采用类似 package.class(如com.t |