SpringCloud搭建微服务之Config配置中心

1. 概述

在采用分布式微服务架构的系统中,由于服务数量众多,为了方便服务配置文件的统一管理,需要分布式配置中心组件。SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置
SpringCloud Config分为服务端和客户端两部分,服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息
配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容

1.1. Config配置中心功能

  1. 集中管理配置文件
  2. 不同环境不同配置,动态化的配置更新,分环境部署
  3. 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
  4. 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
  5. 将配置信息以REST接口的形式暴露

2. 搭建Config Server服务

2.1. 引入核心依赖

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-config-serverartifactId>
dependency>

2.2. 编写主启动类

@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

2.3. 编写application.yml配置

server:
  port: 8820
spring:
  application:
    name: cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/xxxx/springcloud-config.git #git仓库地址
          default-label: master #读取分支
          search-paths:
            - springcloud-config #文件目录

2.4. 验证

在git仓库springcloud-config目录下新建配置文件config-prod.yml,并添加配置信息

config:
  info: "master branch,springcloud-config/config-prod.yml version=1"

启动Config Server微服务,在浏览器地址栏输入地址http://localhost:8820/master/config-prod.yml
SpringCloud搭建微服务之Config配置中心_第1张图片

3. 搭建Config Client服务

3.1. 引入核心依赖

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-configartifactId>
dependency>

3.2. 编写主启动类

@SpringBootApplication
public class ConfigClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

3.3. 编写bootstrap.yml配置

server:
  port: 8821
spring:
  application:
    name: cloud-config-client
  cloud:
    config:
      label: master
      name: config
      profile: prod
      uri: http://localhost:8820

3.3. 编写测试接口类

@RestController
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

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

3.4. 验证

依次启动Config Server和Config Client两个微服务,在浏览器地址栏输入http://localhost:8821/getConfigInfo
SpringCloud搭建微服务之Config配置中心_第2张图片

4. 结合Eureka自动发现

4.1. 引入核心依赖

在两个微服务中引入Eureka Client依赖

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>

4.2. 编写配置文件

在两个微服务配置文件中添加Eureka配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

并且在Config Client微服务配置文件中开启配置文件的自我发现机制

spring:
  cloud:
    config:
      discovery:
        enabled: true #开启配置服务的自动发现机制
        service-id: cloud-config-server

5. Config Client动态刷新

修改git环境配置后,Config Server可以立刻获取到配置信息,Config Client服务却需要重启或重新加载才能获取到配置信息,所以就需要让Config Client动态刷新获取配置信息

5.1. 引入核心依赖

在Config Client微服务中引入核心依赖

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

5.2. 修改bootstrap.yml配置文件

在bootstrap.yml中暴露监控端口

management:
  endpoints:
    web:
      exposure:
        include: '*'

5.3. 在接口类中加入注解

@RefreshScope
@RestController
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

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

5.4. 验证

重新启动微服务Config Client,修改git上配置信息版本号为2,访问Config Server服务http://localhost:8820/master/config-prod.yml
SpringCloud搭建微服务之Config配置中心_第3张图片
再访问http://localhost:8821/getConfigInfo,发现配置信息并没有更新,发送POST请求(curl -X POST “http://localhost:8821/actuator/refresh”)刷新Config Client
刷新客户端服务
再次访问http://localhost:8821/getConfigInfo地址,发现已经获取到了最新配置信息
SpringCloud搭建微服务之Config配置中心_第4张图片

你可能感兴趣的:(SpringCloud,微服务,spring,cloud,config,配置中心)