Nacos基础介绍—配置中心
一、什么是配置中心在微服务架构中,配置中心就是统一管理各个微服务配置文件的服务。把传统的单体jar包拆分成多个微服务后,配置文件也要拆分,每个微服务都要有自己的配置文件。为了统一维护,方便管理,所以出现了配置中心的概念。所有的微服务配置文件都在配置中心中管理和读取,因此,出现了配置中心的概念。提供配置中心的服务有Nacos,Apollo等,这里我们讲解Nacos的配置中心功能。二、Nacos服务端
一、什么是配置中心
在微服务架构中,配置中心就是统一管理各个微服务配置文件的服务。把传统的单体jar包拆分成多个微服务后,配置文件也要拆分,每个微服务都要有自己的配置文件。为了统一维护,方便管理,所以出现了配置中心的概念。所有的微服务配置文件都在配置中心中管理和读取,因此,出现了配置中心的概念。提供配置中心的服务有Nacos,Apollo等,这里我们讲解Nacos的配置中心功能。
二、Nacos服务端配置中心功能
Nacos提供了配置中心的功能,首先,需要在Nacos服务端,配置好服务的配置文件,具体配置如下:
配置命名空间:
命名空间主要用于隔离开发环境。如开发环境,生产环境,测试环境。
其中,public是Nacos默认提供的命名空间,如果不单独配置命名空间,那么默认所有的配置信息都在public命名空间中。
配置列表
在命名空间中配置好后,在配置列表中就会有几个命名空间的tab。
我们以开发环境dev为例,配置某个微服务的配置文件信息。
新建配置界面如下:
Data ID:
Data ID是配置项的唯一标识,它的命名是有一定规范的。我们在配置信息时,一定是先有了微服务客户端,根据客户端需求,才在配置中心配置的信息。
Data ID的命名规范是:
spring.application.name-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
其中spring.application.name就是微服务客户端配置文件中配置的服务名称。${spring.profiles.active}
是配置文件中配置的环境信息。${spring.cloud.nacos.config.file-extension}
是微服务客户端配置文件中配置的file-extension信息。这个信息的作用是指定配置中心中配置信息的格式,一般选择yaml格式的。
假设微服务客户端服务名叫mall-user-consumer-demo,开发环境为dev。file-extension扩展格式为yaml,则Data ID命名为:mall-user-consumer-demo-dev.yaml。
Group
组的概念。上面讲到的命名空间是用来隔离项目环境的。Group是在同一个项目环境中更细粒度的区分配置项,博主现在还没理解有何场景使用Group进行分组,在Data ID中命名已经是通过服务名命名了,而且微服务客户端拉取数据时会根据服务名进行映射的,已经通过Data ID可以区分不同微服务客户端了,不理解Group是进行什么更细粒度的区分。
配置格式
配置格式的勾选要与file-extension扩展模式的配置相对应。一般选择yaml格式。
然后在配置栏中写配置信息即可:
三、微服务客户端配置信息拉取配置中心
踩坑一:
博主刚开始将所有的配置都放在了application.yml中,包括nacos的注册中心配置和配置中心配置,但是在项目启动中,一直报连接的还是localhost:8848。而nacos地址配置的并不是本地。为何还会去连接localhost地址呢?
原因是微服务客户端连接nacos配置中心,是发生在application.yml文件读取之前去拉取的,此时并不知道application.yml中配置的是什么信息,所以只能按默认配置去连接,因此就连接localhost地址去了。那么如何进行地址的修改呢?就是把nacos配置中心的内容,配置到bootstrap.yml中。bootstrap.yml配置文件是先于application.yml文件读取的,而且发生在拉取配置中心信息之前,所以配置在bootstrap.yml文件中,可以解决该问题。
关于application.yml配置文件和bootstrap.yml配置文件的区别,可以参考这篇文章:application.yml与bootstrap.yml的区别
踩坑二:
当客户端配置nacos的配置中心地址为nginx集群时,项目启动无法成功,而单独配置成某个节点时,可以正常使用,这个问题博主猜测是nacos2.x增加了两个端口,而nginx里并没有配置两个端口的转发规则,所以配置中心连接nginx时,会出现错误。
下面,讲解微服务客户端拉取配置中心信息的集成过程:
- 加入nacos配置中心依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- bootstrap.yml中配置nacos配置中心的相关信息:
spring:
#配置nacos注册中心地址
cloud:
nacos:
discovery:
server-addr: 39.100.116.73:80
#namespace: 39e1e969-15f9-46d2-832d-fa052da55377
#group: mall-user
# cluster-name: BJ
config: #配置中心的相关配置
server-addr: 39.100.116.73:8851
file-extension: yaml #与配置中心的扩展项相对应
namespace: 507945ce-1b37-4d59-90aa-f2707fee0013 #命名空间id
因为在application.yml中配置了服务名称和profiles开发环境,所以,结合这两个配置文件,就可以根据Data ID命名规则找到相应的配置项,并拉取相关信息。
- 获取配置中心信息
使用@RefreshScope注解,用于实时拉取更新后的配置中心的信息,无需重启项目。
通过@Value注解,进行配置中心信息的获取,代码如下;
@RefreshScope
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@Value("${user.name}")
private String username;
@Value("${user.age}")
private Integer age;
@Value("${user.id}")
private String id;
@GetMapping("getNacosConfig")
public String test(){
return "id:"+id+",name:"+username+",age:"+age;
}
}
这样,就获取到了配置中心的信息。
四、共享配置
官网地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
spring:
#配置nacos注册中心地址
cloud:
nacos:
discovery:
server-addr: 39.100.116.73:80
#namespace: 39e1e969-15f9-46d2-832d-fa052da55377
#group: mall-user
# cluster-name: BJ
config:
server-addr: 39.100.116.73:8851
file-extension: yaml
namespace: 507945ce-1b37-4d59-90aa-f2707fee0013
shared-configs[0]: #配置共享配置
data-id: db.yaml
group: DEFAULT_GROUP
refresh: true
补充
在nacos配置中心中,客户端的配置文件中只要配置了namespace的data-id,那么就会自动加载客户端application-name.file-extension命名的配置项信息进来。如果想指定自定义命名的其他配置项配置,需要如下配置:
exetension-configs[0]:
data-id: db.yaml #自定义配置名
group: DEFAULT_GROUP #分组
refresh: true #配置自动刷新
需要注意的是,在配置的时候需要配置自动刷新,在实体类里,也需要写@RefreshScope才能生效。
此外,nacos自动刷新Mysql数据源配置和redis数据源配置可参考下面两篇文章:
Mysql动态配置 redis动态配置
更多推荐
所有评论(0)