统一配置管理

随着微服务越来越多,如果达到成百上千个服务,如果一个配置文件和数十个服务有关系,需要逐个微服务的配置文件去调——麻烦;

并且调完,每个微服务都需要重启——生产环境下,一个服务的重启带来的影响比较大;

需求:希望配置文件能够实现统一的管理,比如说数十个配置文件的修改,想只需要修改一个就行了,并且这个服务不用重启动——服务热更新

nacos配置管理

Data ID:一般命名为:服务名称-配置环境.yml(必须唯一)

配置的内容一般是需要变化的配置,比如开关按钮、时间格式之类的

springcloud 与nacos版本对应关系_后缀名

 

springcloud 与nacos版本对应关系_后缀名_02

 

配置获取流程:

项目启动——>(读取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));
}

 

springcloud 与nacos版本对应关系_微服务_03

 这说明,微服务都已经成功从nacos控制台里得到时间的配置

 

 配置热点更新

接下来要实现文件的热更新

要实现配置的自动更新

第一种方式:在@Value注入的变量所在的类上添加注解@RefreshScope即可      //完成属性刷新的一个功能

springcloud 与nacos版本对应关系_配置文件_04

第二种方式:使用@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读取多个配置文件
服务名称-环境-后缀名
服务名称-后缀名
第二个文件名称方程,不管环境怎么变,微服务启动时候一定会读取第二个文件

springcloud 与nacos版本对应关系_微服务_05

属性名冲突时候优先级 :

nacos配置优先于本地配置环境

服务名称-环境-后缀名  文件格式优先于  服务名称-后缀名

搭建Nacos集群

基本步骤:

搭建数据库,初始化数据库表结果

下载nacos安装包

配置nacos

  集群配置 ,解压nacos安装包,配置好配置信息,复制三份

    进入nacos的conf目录,修改配置文件名字,cluster.conf.example重新命名为cluster.conf

    接下来改该文件的内容

    

springcloud 与nacos版本对应关系_微服务_06

  接下来配置mysql的信息,集群要访问mysql信息

    找到application.properties文件

      去掉#,数据源打开(告诉使用的是mysql集群)

      

springcloud 与nacos版本对应关系_配置文件_07

       数据库数量,有几台mysql

      

springcloud 与nacos版本对应关系_后缀名_08

       数据库连接信息

      

springcloud 与nacos版本对应关系_后缀名_09

   集群配置完毕   

启动nacos集群

  将配置好的集群复制成三份,进入每份的配置文件application.properties文件修改端口,分别为8845\8846\8847

  

springcloud 与nacos版本对应关系_配置文件_10

  找到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

  如此,就实现了在这三个当中做负载均衡

  

springcloud 与nacos版本对应关系_后缀名_11

   java代码做相应配置,把原来8848端口改为80端口即可(bootstrap.yml)

值得一提的是,配置完毕开始访问localhost:nacos地址时候,能够访问的了nacos,但是运行的服务不在nacos配置的集群的当中,解决办法为删除data目录下的protocol文件夹,重启服务即可。