SpringCloud Config 分布式配置管理

 

配置中心用于统⼀管理配置, 快速切换各个环境的配置。

 

常用的配置中心

  • 百度开源的disconf    https://github.com/knightliao/disconf
  • 阿⾥开源的diamand   https://github.com/takeseem/diamond
  • springcloud开源的Config   http://cloud.spring.io/spring-cloud-config/
  • zookeeper

 

Config是一个分布式的配置管理中心,由config server、config client2部分组成,每个要从config server是获取配置的服务节点都是config client。

 

 

 


 

 

 

使用git仓库存储配置

config默认使⽤git仓库来存储配置,可以使用公司自己搭建的git服务器,也可以使⽤github、码云上的私人仓库。

不推荐使用github上的仓库来存储配置,因为在国内使用github访问速度很慢,个人开发者建议使用码云。

 

新建私人仓库,名称比如config-mall,不同环境的配置有2种方式

(1)文件名指定

配置文件都放在master分支下,比如用户服务的配置:user-service-dev.yml    user-service-test   user-service-prod.yml

dev是开发环境,test是测试环境,prod是生产环境

 

(2)分支指定(推荐)

新建分支dev、test

master下放生产环境的配置,dev下放开发环境的配置,test下放测试环境的配置

文件名都是user-service.yml,不需要在文件名中指名环境

 

使用yml、properties文件都可以

所有eureka client的配置都可以放在git仓库中,比如网关、消费者、提供者,因为要先从eureka server获取config server节点列表,所以要是eureka client

 

 

 


 

 

 

config server

要单独写一个服务作为config server

 

(1)新建子模块config-server作为服务,创建时只需勾选Spring Cloud Config -> Config Server,Spring Cloud Discovery -> Eureka Discovery Client

也可以手动加依赖:

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

如果只有一台config server,挂了系统就不可用,config server肯定要集群,要作为一个服务注册到eureka server上,各服务节点从eureka server上获取config server的节点列表。

 

 

(2)引导类上加 @EnableConfigServer、@EnableEurekaClient

@EnableEurekaClient可缺省,因为依赖中有eureka client的依赖时会自动加@EnableEurekaClient

 

 

(3)配置文件

server:
  port: 9100

spring:
  application:
    #服务名称
    name: config-server
  cloud:
    config:
      server:
        git:
          #git仓库地址
          uri: https://gitee.com/chenhongyong/config-mall.git
          #git服务器的账户、密码,我使用的是码云,码云的账号、密码
          username: xxxxxxxxxx
          password: xxxxxxxxx
          #超时时间,单位s,默认5
          timeout: 5
          #默认分⽀,默认master。如果config client未指定使用的git仓库分支,默认使用此处配置的默认分支
          default-label: master

eureka:
  client:
    #注册中心地址
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/

eureka的配置、git仓库配置

 

 

启动config server,地址栏输入 127.0.0.1:9100/master/user-service.yml,能看到配置内容说明config server搭建成功。

地址的写法很多:

  • port后面是分支名,缺省时默认为master   127.0.0.1:9100/user-service.yml
  • 文件后缀使用yml、properties、json均可,会自动转化

 

 

 


 

 

 

config client

把eureka client都作为config client,网关、消费者、提供者,只要是eureka server之外的服务都可以是config client

 

(1)创建时勾选Spring Cloud Config -> Config Client

也可以手动添加依赖:

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

这个依赖是勾选Config Client自动添加的,里面包含了config client、jackson等依赖,可以只添加config client的:

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

 

 

(2)配置文件

spring:
  application:
    #服务名称
    name: user-service
  cloud:
    config:
      discovery:
        #使用配置中心,默认false
        enabled: true
        #配置中心的服务名
        service-id: config-server
      #指定环境,默认使用master分支
      #profile: dev
      #使用label指定分支
      label: dev

eureka:
  client:
    #注册中心地址
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/

配置文件中只需保留erueka、config的配置,其它配置都放到git仓库中

 

环境有2种指定方式,对应git仓库2种配置方式:

  • 如果git仓库使用文件名区分,则使用profile指定

比如服务名是user-service,profile是dev,那就使用分支(默认master)下的user-service-dev.yml

 

  • 如果git仓库使用分支区分,则使用label指定要使用的分支

比如服务名是user-service,会使用指定分支下的user-service.yml

 

 

(3)端口问题

如果我们把端口配置server.port放到git仓库中,应用使用默认的8080就启动了,我们配置的端口无效。有2种解决方式:

  • 就把server.port写在resources下的application.yml中
  • 把server.port放到git仓库中,把resources下的application.yml重命名为bootstrap.yml

spring、springboot启动时会自动加载资源根目录下的application、bootstrap配置文件,只是加载时机不同

启动应用时会在控制台打印端口,可以在控制台查看应用使用的端口

 

 

流程:

应用启动注册Eureka Server -> 从Eureka Server获取Config Server的节点列表 -> 从Config Server获取配置。

 

你可能感兴趣的:(SpringCloud Config 分布式配置管理)