一光年

[SpringCloud-极简示例] 8. 加入Config,统一管理微服务配置

2019.06.25

当微服务的规模扩大到一定程度后,配置就变成了一件令人头疼的事情。例如:

  1. 注册中心的URL要修改
  2. 开发、测试、预发布、生成环境分别配置
  3. 要运行期间动态调整配置

如果只是2、3个微服务,手动更新一下没有什么关系。但如果是上百个微服务同时运行,光是IP分配和管理就是一项恐怖的任务了。

所以在SpringCloud中,微服务配置的统一管理组件Config就应运而生了。

demo8-framework

本例将实现一个Config Server,统一管理其它服务(包括网关服务)的配置。

1. 创建MS-CONFIG项目

在SpringInitializr中创建一个新项目,包括以下依赖:

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

2. 项目配置

在application.yml中添加配置信息。项目配置一般推荐使用git进行管理,也可以选择使用本地文件进行管理。本例从简,在本地管理微服务的配置文件。

server:
  port: 8108

spring:
  application:
    name: ms-config
  cloud:
    config:
      server:
        native:
          search-locations: classpath:configs/   # 搜索src/main/resource下的configs目录下的所有配置文件
  profiles:
    active: native

3. 编辑微服务的配置文件

从步骤2可以看出,微服务文件保存在本地的resources/configs目录下。以MS-PROVIDER为例,创建ms-provider-dev.yml,加入以下内容:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8765/eureka/
  instance:
    prefer-ip-address: true

可以看出,这就是Provider服务的配置内容。

4. 测试Config Server

启动Config Server的主程序,在浏览器中输入: http://localhost:8108/ms-provider/dev,可得到以下响应内容。

{"name":"ms-provider","profiles":["dev"],"label":null,"version":null,"state":null,"propertySources":[{"name":"classpath:configs/ms-provider-dev.yml","source":{"eureka.client.serviceUrl.defaultZone":"http://localhost:8765/eureka/","eureka.instance.prefer-ip-address":true}}]}

可见ConfigServer的服务已经可以成功获取Provider的配置内容。

5. 修改Provider,加入ConfigClient依赖

对于Provider服务来讲,需要加入以下依赖作为ConfigClient:

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

6. 修改Provider服务配置

对于application.yml,只需保留端口设置的内容。

server:
  port: 8082

另外,需要在同级目录下创建bootstrap.xml,配置连接ConfigServer的内容。

spring:
  application:
    name: ms-provider
    
  cloud:
    config:
      uri: http://localhost:8108/
      profile: dev

7. 测试Config Client

修改完成了,按照以下操作步骤,可以确认ConfigClient正常工作。

  1. 启动Eureka服务
  2. 启动Config服务(ConfigServer)
  3. 启动Provider服务

刷新Eureka监控界面,发现Provider已正常启动。证明Provider服务的ConfigClient已经从ConfigServer处取得配置,并从配置中获取Eureka地址并连接上了Eureka。