目录
Nacos配置管理——实现配置管理
配置管理实践
Nacos配置管理——微服务配置拉取
Nacos配置管理——配置热更新
方式一:
编辑 方式二(推荐方式):
Nacos配置管理——多环境配置共享
优先级问题
Nacos配置管理——nacos集群搭建
总结编辑
Nacos配置管理——实现配置管理
在一个微服务架构的系统中往往会有多台服务器负责不同的微服务。假设配置文件需要做修改,且该配置文件跟数10个微服务关联,则需要逐个去调整配置。并且调整完后还需要重启,生产环境下重启带来影响不可估量。
配置热更新——实现统一修改配置并且立刻生效,需要一个配置管理服务,微服务启动时会去读取该配置管理服务和本地配置结合作为完整配置使用。
配置管理实践
在nacos端点击配置管理->配置列表右边的+,用来新建配置
Data ID:配置文件名称,通常使用 服务名称-profile.yml ,dev就是生产环境
分组默认即可。
配置内容:用来写需要热更新的内容,不能全部配置都写在这里,通常配置开关逻辑业务类型,给
true开启,给false关闭.还有诸如日期格式,如果需要变更也可以在这里变更。
Nacos配置管理——微服务配置拉取
通常的项目运行过程如下
一般来说nacos地址是存在application.yml中,但是现在要在读取本地配置前先读取nacos配置文件,所以要用到bootstrap.yml配置文件,优先级远高于application.yml.因此要把相关信息放到bootstrap.yml中去
步骤实现
在userserver这个服务搞完之后就可以删除相同的配置信息了,如服务名称和nacos服务地址这些都在bootstrap.yml中有了
之后要读取到nacos配置并使用
在controller中定义一个测试url,用@Value注解获取配置文件内容,然后规定格式返回一个日期。
成功获取到预期格式日期。
Nacos配置管理——配置热更新
方式一:
加上注解之后重启项目
修改日期格式后再次访问有所变化成功实现热更新
方式二(推荐方式):
这种是约定大于配置的注入方式,只要前缀带有pattern并且属性名和对应的上就可以实现自动注入
然后Controller中的代码修改为。
@Autowired
private PatternProperties properties;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
}
总结:
Nacos配置管理——多环境配置共享
使用情况:一个配置属性在开发生产测试环境下的值是相同。如果不同环境的下都写或者都要改就过于麻烦。
新建一个userserver.yaml
现在userserver这个服务可以读到userserver-dev.yaml和userserver.yaml两个配置文件。
新增加一个属性和一个url接口
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
private String envShareValue;
}
@GetMapping("prop")
public PatternProperties properties(){
return properties;
}
启动8081端口的实例作为dev环境,启动8082端口的实例作为test环境。
现在8081的可以读到两个配置文件,8082端口的只能读到一个
优先级问题
Nacos配置管理——nacos集群搭建
官方给出的Nacos集群图:
使用nginx作为负载均衡器之后的集群模式图
上个nacos要实现数据共享,这里整了多个mysql的集群,让多个nacos都访问这个mysql的集群完成读写。
这里要先按照资料里面给出的集群方式搭建好环境。
此处nginx的配置文件如下所示
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 88;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
配置文件的地址也要改
重新启动两个实例
然后新建一个配置
在看到数据库里面就有了这个配置的信息出现了。
先在就做到了三个nacos负载均衡的访问,并且每个nacos都指向同一个数据库了。
总结
跑这个玩意启动一定要一个一个来,并且启动时不要运行idea项目,不然内存直接上天了。