SpringCloud之Nacos配置管理(热共享更新配置集群搭建)
Posted -emo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud之Nacos配置管理(热共享更新配置集群搭建)相关的知识,希望对你有一定的参考价值。
统一配置管理
随着微服务越来越多,如果达到成百上千个服务,如果一个配置文件和数十个服务有关系,需要逐个微服务的配置文件去调——麻烦;
并且调完,每个微服务都需要重启——生产环境下,一个服务的重启带来的影响比较大;
需求:希望配置文件能够实现统一的管理,比如说数十个配置文件的修改,想只需要修改一个就行了,并且这个服务不用重启动——服务热更新
nacos配置管理
Data ID:一般命名为:服务名称-配置环境.yml(必须唯一)
配置的内容一般是需要变化的配置,比如开关按钮、时间格式之类的
配置获取流程:
项目启动——>(读取nacos配置文件,需要先知道nacos的地址)——>读取本地配置文件application.yml——>创建Spring容器——>加载bean
bootstrap.yml的优先级比application.yml优先级更高,放置nacos地址
步骤:
1:引入Nacos配置管理客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2:新建一个bootstrap.yml文件,作为引导文件
spring:
application:
name: orderservice #服务名称
profiles:
active: dev #开发环境
cloud:
nacos:
server-addr: localhost:8848 # nacos服务地址
config:
file-extension: yaml #文件名后缀
检验是否成功
@Value("$pattern.dateformat") //读取配置文件
private String dataformat;
@GetMapping("now")
public String now()
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dataformat));
这说明,微服务都已经成功从nacos控制台里得到时间的配置
配置热点更新
接下来要实现文件的热更新
要实现配置的自动更新
第一种方式:在@Value注入的变量所在的类上添加注解@RefreshScope即可 //完成属性刷新的一个功能
第二种方式:使用@ConfigurationProperties注解,可以完成配置的自动加载
新建一个类,专门完成配置的加载
@Data //提供get和Set的方法
@Component //纳入容器管理,任何人都可以使用
@ConfigurationProperties(prefix = "pattern") //前缀,约定大于配置,前缀名和变量名两者拼接与配置文件一致,就能够完成配置文件的属性注入
public class PatternProperties
private String dateformat;
然后在UserController类注入测试
@Autowired
private PatternProperties properties;
@GetMapping("now")
public String now()
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
配置共享
多环境配置共享:
场景:有一个配置属性,在开发、测试、生产等环境的值是一样的,志这样的配置,在每个配置文件里写一个,浪费并且麻烦不合适,找一个地方,这个配置更改之后,不管环境怎么变,都能够被加载————多环境共享需求
实现步骤
微服务启动时会从nacos读取多个配置文件
服务名称-环境-后缀名
服务名称-后缀名
第二个文件名称方程,不管环境怎么变,微服务启动时候一定会读取第二个文件
属性名冲突时候优先级 :
nacos配置优先于本地配置环境
服务名称-环境-后缀名 文件格式优先于 服务名称-后缀名
搭建Nacos集群
基本步骤:
搭建数据库,初始化数据库表结果
下载nacos安装包
配置nacos
集群配置 ,解压nacos安装包,配置好配置信息,复制三份
进入nacos的conf目录,修改配置文件名字,cluster.conf.example重新命名为cluster.conf
接下来改该文件的内容
接下来配置mysql的信息,集群要访问mysql信息
找到application.properties文件
去掉#,数据源打开(告诉使用的是mysql集群)
数据库数量,有几台mysql
数据库连接信息
集群配置完毕
启动nacos集群
将配置好的集群复制成三份,进入每份的配置文件application.properties文件修改端口,分别为8845\\8846\\8847
找到bin目录,以集群方式启动nacos,命令行为:startup.cmd
nginx反向代理
直接找到nginx的安装包,解压后找到conf目录,http里面添加如下配置信息
upstream nacos-cluster
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
server
listen 80;
server_name localhost;
location /nacos
proxy_pass http://nacos-cluster;
打开nginx,cmd命令下输入start nginx.exe
如此,就实现了在这三个当中做负载均衡
java代码做相应配置,把原来8848端口改为80端口即可(bootstrap.yml)
值得一提的是,配置完毕开始访问localhost:nacos地址时候,能够访问的了nacos,但是运行的服务不在nacos配置的集群的当中,解决办法为删除data目录下的protocol文件夹,重启服务即可。
八SpringCloud实用篇_Nacos配置共享
一、配置共享
其实微服务启动时,会去nacos读取多个配置文件,例如:
-
[spring.application.name]-[spring.profiles.active].yaml
,例如:userservice-dev.yaml -
[spring.application.name].yaml
,例如:userservice.yaml
而[spring.application.name].yaml
不包含环境,因此可以被多个环境共享。
下面我们通过案例来测试配置共享
1.1、添加一个环境共享配置
我们在nacos中添加一个userservice.yaml
文件:
1.2、在user-service中读取共享配置
在user-service服务中,修改PatternProperties
类,读取新添加的属性:
package com.xbmu.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties
private String dateformat;
private String envSharedValue;
在user-service服务中,修改UserController,添加一个方法:
1.3、运行两个UserApplication,使用不同的profile
修改UserApplication2
这个启动项,改变其profile值:
这样,UserApplication(8082)使用的profile是dev,UserApplication2(8081)使用的profile是test。
启动UserApplication和UserApplication2
访问结果如下:
可以看出来,不管是dev,还是test环境,都读取到了envSharedValue
这个属性的值。
1.4、总结:
微服务会从nacos读取的配置文件:
- [服务名]-[spring.profile.active].yaml,环境配置
- [服务名].yaml,默认配置,多环境共享
优先级:
- [服务名]-[环境].yaml >[服务名].yaml > 本地配置
1.5、多服务共享配置
不同微服务之间可以共享配置文件,通过下面的两种方式指定:
- 方式一
server:
port: 8082
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
shared-configs: # 多微服务间共享的配置列表
- dataId: common.yaml # 要共享的配置文件id
- 方式二
server:
port: 8082
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
extension-configs: # 多微服务间共享的配置列表
- dataId: extend.yaml # 要共享的配置文件id
多种配置的优先级
以上是关于SpringCloud之Nacos配置管理(热共享更新配置集群搭建)的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud微服务之微服务SpringCloud实用篇02
SpringCloud微服务之微服务SpringCloud实用篇02