1.Nacos 服务(Server)
从 Nacos 官网 下载 nacos-server-$version.zip 包,解压到指定目录。
Windows 中,打开解压目录下的 \bin\startup.cmd 启动服务。
Nacos 服务占用内存近 2G,对资源要求很高。启动成功后,Nacos 服务就运行起来了。在浏览器中输入 http://127.0.0.1:8848/nacos/index.html,就可以打开 Nacos 控制台:
使用默认账号密码(nacos/nacos),就可以登陆控制台:
启动过程中可能会出现的问题
下载最新的 Nacos 版本在 Windows 直接运行脚本启动,首先报错第一个问题如下:
java.lang.IllegalArgumentException: db.num is null
java.lang.RuntimeException: [db-load-error]load jdbc.properties error
解决方法
将 Nacos 下的 conf/application.properties 文件修改如下图所示
其中的用户名密码改成自己mysql的用户名和密码新建本地数据库 Nacos,执行 conf/nacos-mysql.sql 文件,确保本地数据库有此信息
继续运行 startup.cmd 文件,继续出现主要报错如下所示:
Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
Unable to start embedded Tomcat
Error creating bean with name 'distroFilterRegistration' defined in class path resource
Error creating bean with name 'distroFilter'
java.net.UnknownHostException: jmenv.tbsite.net
解决方法
打开启动脚本文件 startup.cmd,修改如图所示即可
将这个set MODE配置修改为:set MODE=“standalone”,就是单机版模式
set MODE="cluster"为集群模式,根据自己需要修改
2.Nacos 客户端
在基于 SpringBoot 微服务工程中,搭载 Nacos 客户端,实现配置管理
2.1 添加依赖
<!--nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2.2 添加配置
新建 bootstrap.yml
spring:
nacos:
discovery:
server-addr: 127.0.0.1:8848
group: DEFAULT_GROUP #分组名称 不指定默认DEFAULT_GROUP 可以通过使用不同的组,来读取不同的配置
config:
refresh-enabled: true #自动刷新配置
file-extension: yaml #配置文件后缀
profiles:
active: dev #开发模式
application:
name: nacos-service
server:
port: 8080
这里配置的 spring.application.name,会作为 Nacos 配置管理 dataId 字段的一部分。dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
符号名 | 说明 |
prefix | 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置 |
spring.profile.active | 当前环境对应的 profile。当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 {file-extension}。 |
file-exetension | 配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。 |
2.3 启动类
@SpringBootApplication
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class,args);
}
}
2.4 配置项
在实际的 Spring Bean 类中,加入业务工程所需要配置项。形如:
@RestController
@RefreshScope
public class ConfigController {
@Value("${config.apps}")
private String apps;
@GetMapping("hi")
public String test(){
return apps;
}
}
首先在业务类上加入 @RefreshScope,这样当配置中心的配置值发生变化时,业务类所引用的值就会自动更新。
接着通过 @Value 将外部的配置项值动态注入到该 Bean 中。通过冒号语法,可以给配置项指定一个默认值。
2.5 启动
这样Nacos 客户端就配置好了
3 配置中心
从架构图上可以知道,Nacos提供了两种服务,一种是用于服务注册、发现的Naming Service,一种是用于配置中心、动态配置的Config Service,而他们底层均由core模块来支持。外层提供OpenAPI供客户端使用,并提供了User Console、Admin Console方便用户使用 。
用户通过管理平台发布配置,通过HTTP调用将配置注册到服务端,服务端将之保存在MySQL等持久化存储引擎中;用户通过客户端SDK访问服务端的配置,同时建立HTTP的长轮询监听配置项变更,同时为了减轻服务端压力和保证容灾特性,配置项拉取到客户端之后会保存一份快照在本地文件中,SDK优先读取本地文件里的配置。当服务端的配置发生变更时,客户端会通过监听机制,拿到变更后的最新配置信息。
3.1 新建配置
点击加号增加配置
增加两个配置
nacos-server-dev.yaml
nacos-server.yaml
上图中nacos-server.yml是不起作用的,nacos-server.yaml和nacos-server-dev.yaml是都可以的,优先使用xx-dev.yaml配置文件的值,即:当xx-dev.yaml存在时用xx-dev.yaml配置的值,当xxx-dev.yaml不存在且xxx.yaml存在时使用xxx.yaml配置的值
另:如果配置了spring.cloud.nacos.config.namespace,则一定要配置在相对应的命名空间里
3.2 测试
使用 GET 方式请求以下地址:
请求成功后,就会返回 nocos-dev
到此 Nacos 注册中心和配置中心搭建完毕