《SpringCloud篇:04.2Config - 动态配置概述》

2020-11-13 10:16:06 浏览数 (1)

一、概念

  • 为什么学习Config
    • 分布式系统中,项目比较多,配置文件没有统一管理的方式
    • 配置文件分散在不同项目中,修改起来比较麻烦
    • 配置文件存在安全性问题
    • 配置文件修改后的动态刷新,无法实现的
  • Config介绍:
    • 将配置文件编写在Git仓库中。
    • 通过ConfigServer拉取Git仓库中的配置信息。
    • 其他服务作为ConfigClient与ConfigServer进行交互,拉取到相应的配置信息

二、搭建ConfigServer

  • 准备Git仓库,并编写配置文件,命名规则:服务名-环境名.yml
  • 创建SpringBoot项目
  • 导入依赖:spring-cloud-config-server,spring-cloud-starter-netflix-eureka- client,spring-boot-starter-web
代码语言:javascript复制
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
    </dependencies>
  • 启动类添加注解:@EnableConfigServer
代码语言:javascript复制
@SpringBootApplication
@EnableConfigServer
public class ConfigServerStarterApp {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerStarterApp.class,args);
    }
}
  • 编写配置文件:
代码语言:javascript复制
# 其他配置略…………
spring:
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/qianfeng_laozheng/configserver.git  #指定Git仓库地址
  • 启动项目访问Git上的配置文件信息:http://ip:port/branch/application-profile.yml 运行结果

三、搭建ConfigClient

  • ConfigClient要通过与ConfigServer交互获取到Git上的配置文件信息
  • 创建SpringBoot项目
  • 导入依赖:spring-cloud-starter-config,spring-cloud-starter-netflix-eureka-client,spring-boot-starter-web
代码语言:javascript复制
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
  • 创建配置文件,命名为:bootstrap.yml
代码语言:javascript复制
# eureka在哪
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka


# configserver在哪
spring:
  application:
    name: configclient
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIGSERVER
      label: master
      profile: dev



# 加载ConfigServer中的配置,会通过  /${label}/${spring.application.name}-${profile}.yml
#                      http://localhost:8888/master/configclient-dev.yml
  • 编写bootstrap.yml文件:
    • EurekaServer所在的地址
    • 开启ConfigServer并且指定ConfigServer在Eureka中的名称
    • 指定当前服务名称
    • 指定使用的配置文件的分支以及环境
    • 通过上述配置,可以获取如下内容:http://configserver的地址/分支/服务名称-环境.yml
  • 后续在git上添加配置文件时,推荐先在项目中编写,再复制过去。。。。。。。

四、实现手动配置刷新(可以配置)

  • Gitlab中的配置文件被修改之后,手动的发送一个请求给任意一个有bus组件的服务。
  • 将ConfigServer作为通知的服务:
    • 导入依赖:spring-cloud-starter-bus-amqp,spring-boot-starter-actuator
    • 编写配置文件:
      • 连接上RabbitMQ服务的ip,port,username………… 配置actuator的配置:
代码语言:javascript复制
management:
  endpoints:
    web:
      exposure:
        include: "*"
  • 启动ConfigServer,再RabbitMQ的监控界面中,查看到SpringCloudBus的队列被 创建了

修改ConfigClient服务:

  • 导入依赖:spring-cloud-starter-bus-amqp
  • 编写配置文件:连接上RabbitMQ服务的ip,port,username…………(放在git上)
  • 创建Controller类,并且再类上添加@RefreshScope:
代码语言:javascript复制
@RestController
@RefreshScope
public class TestController {
    @Value("${version}")
    public String version;

    @GetMapping("/version")
    public String version(){
        return version;
    }
}

测试功能:

  • 访问configclient中的/version路径 — v1.0.0
  • 修改Git仓库中的配置,将v1.0.0修改为v2.0.0
  • 手动发送请求给ConfigServer:http://configserver路径/actuator/bus-refresh,发送POST请求
  • 再次访问configclient中的/version路径 — v2.0.0

五、实现自动刷新配置(可以配置)

  • 让Git远程仓库可以通过ip和port找到你当前ConfigServer所在的位置
    • 下载并安装natapp软件
    • 打开:http://natapp.cn
    • 注册账号,登录,购买免费的隧道,设置当前隧道映射的端口地址
    • 下载natapp程序,并复制一份config.ini,并添加authtoken的隧道密钥
    • 双击运行natapp.exe文件
  • 再Git仓库中配置WebHooks

0 人点赞