微服务之配置中心Config

一、什么是配置中心?

  微服务意味着要将单体应用中的业务拆分成一个个子服务,这些服务都需要必要配置信息才能运行,每个微服务都包含一个类似application.yml的配置文件,单个管理显得极其麻烦,于是集中式的管理思想诞生了,该思想旨在微服务模块之外提供一个集中化的外部配置支持平台,为每个微服务提供配置支持,这个平台称为配置中心。

  SpringCloudConfig是SpringCloud集成的一种配置中心服务框架,分为客户端和服务端两部分。服务端叫分布式配置中心,它是一个独立的微服务应用,用于连接配置服务器并向客户端提供配置信息,服务器默认采用git来存储配置信息。客户端也就是其它的一个个微服务,它通过指定的服务端来管理应用资源,在启动时从服务端获取配置信息。以下是配置中心架构图

 

 二、Config配置中心搭建

  搭建配置中心步骤:

    1、创建配置中心仓库:按照配置中心架构图分析,我们首先需要注册一个git账号,创建一个配置中心仓库Repository,创建一个config-test.yml配置文件,记录下git仓库地址。

    2、创建配置中心微服务模块步骤:

      a.服务模块引入config-server包

<dependency>
  <groupId>org.springframework.cloud</groupid>
  <artifactid>spring-cloud-config-server</artifactId>
</ dependency>

      b.配置application.yml文件:代码示例如下,表示配置中心获取配置信息时从git@github.com:xxxx/springcloud-config.git/springcloud-config路径下获取,选择分支为master分支。

server:
  port: 3344
spring:
 application:
   name:cloud-config-center   #注册进Eureka服务器的微服务名
cloud: config: server: git: uri: git@github.com:xxxx
/springcloud-config.git #GitHub上面的git仓库地址 search-paths: - springcloud-config #搜索目录路径 label: master #仓库分支
eureka : client: service
-url: defaultzone: http://localhost:8099/eureka #注册该模块到eureka注册中心

      c.主启动类上增加@EnableConfigServer注解激活配置中心功能。

  完成以上3步,启动时就可以通过配置中心去获取git上的配置文件了,在浏览器上访问http://localhost:3344/master/config-test.yml即可获取。配置中心将配置文件以REST接口的形式暴露供客户端使用,需要注意的是,官方提供了几种获取配置的规则(根据该规则,要求配置文件的名称应该按照规则格式来书写),具体如下:

URL格式 说明

/{label}/{application}-{profile}.yml

label表示分支,application表示服务名称,profile表示环境(test、prod、dev)

/{application}-{profile}.yml

application表示服务名称,profile表示环境(test、prod、dev)

/{application}/{profile}[/{label}]

label表示分支(可选),application表示服务名称,profile表示环境(test、prod、dev)

/{label}/{application}-{profile}.properties

 label表示分支,application表示服务名称,profile表示环境(test、prod、dev)

 

 

 

 

 

 

 

 

 

三、客户端从配置中心获取配置文件

  前面讲述了如何创建配置中心服务模块,以及配置中心从git获取配置文件的方式,接下来讲解客户端又是如何从配置中心获取配置文件的。

  配置中心服务模块引入的jar包是spring-cloud-config-server,而客户端需要引入的是spring-cloud-starter-config。代码如下

<dependency>
   <groupId>org.springframework.cloud</groupid>
   <artifactid>spring-cloud-starter-config</artifactid>
</ dependency>

  在进行客户端配置文件编辑之前,我们先了解一下bootstrap.yml配置文件和application.yml文件的区别。applocation.yml文件时是用户级别的资源配置文件,而bootstrap.yml是系统级别的,优先级更高,在加载时bootstrap要比application先加载。在springCloud启东时会创建一个bootstrap上下文,作为spring应用Application上下文的父级,在初始化时Bootstrap上下文会从外部源加载配置属性。因此在创建客户端模块时我们先选择使用bootstrap.yml文件,创建和配置方式与application.yml一样。

  以下是bootstrap.yml的示例代码:

server:
  port: 3355
spring:
 application:
   name:cloud-config-client   #注册进Eureka服务器的微服务名
 cloud:
   config:
     label: master           #分支名称
     name: config            #配置文件名称
     profile: dev            #读取后缀名称
     uri: //localhost:3344/  #配置中心地址
eureka :
  client:
    service-url:
     defaultzone: http://localhost:8099/eureka   #注册该模块到eureka注册中心

  进行如上配置之后,接下来创建一个从配置中心上获取配置信息的Controller,示例代码如下:

@RestController
public class ConfigClientController
{
   value("${config.info}")  /*读取配置文件信息,系统会根据bootstrap配置文件里的config信息从注册中心获取配置文件信息*/
   private string configInfo;

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

  完成以上步骤后,启动配置中心和客户端,访问http://localhost:3355/configInfo,系统将会根据bootstrap配置信息从注册中心获取git配置文件。

 四、分布式配置文件动态刷新

  完成前面的客户端和配置中心模块开发后,在git仓库中修改配置文件的内容,分别访问http://localhost:3344/master/config-test.yml  和 http://localhost:3355/configInfo ,通过注册中心3344访问能够及时的获取到最新更改的内容,而通过客户端3355返回的还是最初的内容,也就是说3355客户端没能获取到最新的更改内容(除非重启客户端)。真实情况下,运维工程师可能会根据需求调整配置文件内容,但每次调整都不可能要求重启每一个客户端模块,因此需要修改3355模块对配置文件进行监控,实时刷新最新文件。

  客户端实现实时刷新的步骤:

  1、引入actuator监控工具包:

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

   2、修改yml暴露监控端点:

#暴露监控端点
management:
   endpoints:
web:
base-path:/actuator #actuator提供的api接口根路径 exposure: include:
"*" #需要开放的端点,默认只打开health、info,*表示所有
exclude: #需要排除的端点

   3、在业务类Controller上增加@RefreshScope注解:

@RestController
@Refreshscope   
public class ConfigClientController
{
   value("${config.info}")  /*读取配置文件信息,系统会根据bootstrap配置文件里的config信息从注册中心获取配置文件信息*/
   private string configInfo;

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

   4、通知客户端配置文件需要刷新:

    a.手动刷新端点:发送post请求到 http://localhost:3355/actuator/refresh 通知3355客户端配置文件已经改变,客户端收到该请求后动态刷新配置文件。

    b.自动刷新端点:结合git网络钩子程序,在配置文件修改后,git自动post访问客户端暴露的端点实现自动刷新。或者结合消息总线SpringCloudBus完成自动刷新。

  到此,从客户端到配置中心的配置文件动态获取功能已完成。 

posted @ 2021-10-14 14:41  我若安好,便是晴天  阅读(1821)  评论(0编辑  收藏  举报