一、Nacos Server 数据持久化
Nacos 默认使用嵌入式数据库进行数据存储,它支持改为外部Mysql存储
1、新建数据库
数据库初始化脚本文件
${nacoshome}/conf/nacos-mysql.sql
2、修改${nacoshome}/conf/application.properties,增加Mysql数据源配置
二、 Nacos Server 集群
1、安装3个或3个以上的Nacos
复制解压后的nacos文件夹,分别命名为nacos-1、nacos-2、nacos-3
2、修改配置文件
①application.properties
-
修改端口号;
-
同时给当前实例节点绑定ip,因为服务器可能绑定多个ip
nacos.inetutils.ip-address=127.0.0.1
②cluster.conf
复制一份conf/cluster.conf.example文件,命名为cluster.conf
在配置文件中设置集群中每一个节点的信息
# 集群节点配置
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
3、分别启动每一个实例(可以批处理脚本完成)
linux
sh startup.sh -m cluster
windows
startup.cmd -m cluster
启动之后分别访问各实例地址
127.0.0.1:8848/nacos
127.0.0.1:8849/nacos
127.0.0.1:8850/nacos
能正常访问即可
若停掉某一个服务,那么会重新进入选举状态
三、微服务注册到nacos集群
原来的配置,server-addr写了一个地址,集群的话写多个地址,以逗号分隔开。
四、Nacos 配置中心
之前:Spring Cloud Config + Bus
有Nacos之后,分布式配置就简单很多
Github不需要了(配置信息直接配置在Nacos server中),Bus也不需要了(依然可以完成动态刷新)
(一)Nacos server中添加配置信息
(二)微服务中开启 Nacos 配置管理
1、pom
<!--nacos config client 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、配置文件
微服务中如何锁定 Nacos Server 中的配置文件(dataId)?
通过 Namespace + Group + dataId 来锁定配置文件,Namespace不指定就默认public,Group不指定就默认 DEFAULT_GROUP
dataId 的完整格式如下
${prefix}-${spring.profile.active}.${file-extension}
spring:
cloud:
nacos:
# nacos config 配置
config:
# 锁定server端的配置文件(读取它的配置项)
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
namespace: 9c43f002-6fa2-42fa-a27e-6a79d2e89b20 # 命名空间id
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yaml #默认properties
# 根据规则拼接出来的dataId效果:lagou-service-resume.yaml
3、添加 @RefreshScope
4、测试
定义一个web接口进行测试
package com.lagou.edu.web;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 该类用于模拟,我们要使用共享的那些配置信息做一些事情
*/
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
// 和取本地配置信息一样
@Value("${lagou.message}")
private String lagouMessage;
@Value("${mysql.url}")
private String mysqlUrl;
@GetMapping("/viewconfig")
public String viewconfig() {
return "lagouMessage==>" + lagouMessage + " mysqlUrl=>" + mysqlUrl;
}
}
http://localhost:8082/config/viewconfig
5、注意
如果出现无法获取nacos配置,比如【could not resolve placeholder lagou.message】等问题,重启nacs服务试试
(三)配置项刷新
重新访问,配置项是直接生效的。比之前使用spring cloud config + BUS时要方便很多(需要进行额外配置才行,而且必须调用刷新链接才可以)。
(四)监听查询
由上面的配置刷新可以猜测到,肯定是有监听机制。
(五)data ID扩展
1、扩展多个dataId
思考:一个微服务希望从配置中心Nacos server中获取多个dataId的配置信息,可以吗?
可以的,扩展多个dataId
①nacos添加多个配置
②微服务配置文件添加扩展配置
spring:
# nacos配置
cloud:
nacos:
discovery:
# server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
server-addr: 127.0.0.1:8848 # 配置nacos server地址
# nacos config 配置
config:
# 锁定server端的配置文件(读取它的配置项)
server-addr: 127.0.0.1:8848
namespace: 1f7c0996-ffb2-4fd7-ade8-2c206c1a36a9 # 命名空间id
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yaml #默认properties
# 根据规则拼接出来的dataId效果:lagou-service-resume.yaml
ext-config[0]:
data-id: abc.yaml
group: DEFAULT_GROUP
refresh: true #开启扩展dataId的动态刷新
ext-config[1]:
data-id: def.yaml
group: DEFAULT_GROUP
refresh: true #开启扩展dataId的动态刷新
其中,主要关注以下部分:
# 根据规则拼接出来的dataId效果:lagou-service-resume.yaml
ext-config[0]:
data-id: abc.yaml
group: DEFAULT_GROUP
refresh: true #开启扩展dataId的动态刷新
ext-config[1]:
data-id: def.yaml
group: DEFAULT_GROUP
refresh: true #开启扩展dataId的动态刷新
③重启项目并重新访问
2、同样配置的优先级问题
根据规则生成的dataId > 扩展的dataId(对于扩展的dataId,[n] n越大优先级越高)