SpringCloud 分布式配置中心(Config)

本文介绍了SpringCloudConfig如何为微服务提供集中化的配置管理,包括服务端和客户端的组成部分,以及如何通过Git仓库管理不同环境的配置文件。通过配置中心,实现了配置的动态更新和环境切换,无需重启服务即可应用新配置。文中详细展示了配置中心的搭建过程,包括创建远程仓库、配置中心模块的创建与启动,以及Eureka客户端的配置和测试。
摘要由CSDN通过智能技术生成

1 介绍

  在微服务中起码有几十上百的服务,每个服务都有自己的配置文件。若需要修改,则特别麻烦。

  Spring Cloud Config 为微服务提供集中化的外部配置支持,配置服务器为各个不同的微服务应用的所有环节提供了一个中心化的外部配置。如下图所示:

在这里插入图片描述

  SpringCloud Config 分为服务端客户端两部分。

  服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息、加密、解密信息等访问接口。

  客户端则通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用 git 来存储配置信息,这样就有助于对环境配置进行版本管理。并且可以通过 git 客户端工具来方便的管理和访问配置内容。

   SpringCloud Config 有以下功能:

  • 集中管理配置文件
  • 不同环境,不同配置,动态化的配置更新,分环境部署,比如 /dev /test /prod /beta / release
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉去配置自己的信息。
  • 当配置文件发生改变,服务不需要重启,即可感知到配置的变化,并应用新的配置。
  • 将配置信息以 REST 接口的形式暴露。

2 整合配置中心

2.1 创建远程仓库

  根据上图,首先在 github 或码云上创建一个仓库。以码云为例,拉取仓库下来后,在根目录下创建 eureka 文件,并在 /erueka 路径下创建 eureka.yml、eureka-dev.yml、eureka-prod.yml 三个配置文件及编写相应配置信息。最后上传到到码云。

在这里插入图片描述

  • eureka.yml
server:
  port: 7001
  
spring:
  profiles:
    active: dev
  • eureka-dev.yml 测试环境配置
spring:
  application:
    name: springcloud-eureka-dev
  security:
    user:
      name: pkyShare
      password: 123456

eureka:
  instance:
    hostname: eureka7001 # eureka 服务端实例名称
  client:
    # 单点时,如果 registerWithEureka 配置为 true,则 eureka server 会报错 Cannot execute request on any known server
    registerWithEureka: false # 是否注册到 eureka 服务,默认为 true,当前已为 eureka server,且单点 eureka,故配置为 false
    fetchRegistry: false # 是否在本地缓存注册表信息,默认为 true,当前为单点 eureka server,不需要从其他 eureka 除获取注册表信息,更谈不上缓存,故配置为 false
    serviceUrl:
      # 配置其他 eureka 的地址,如果多台则逗号分隔。
      defaultZone: http://pkyShare:123456@${eureka.instance.hostname}:${server.port}/eureka/
#      defaultZone: http://pkyShare:123456@eureka7002.com:7002/eureka/,http://pkyShare:123456@eureka7003.com:7003/eureka/
  • eureka-prod.yml 生产环境配置
spring:
  application:
    name: springcloud-eureka-prod
  security:
    user:
      name: pkyShare
      password: 123456

eureka:
  instance:
    hostname: eureka7001 # eureka 服务端实例名称
  client:
    # 单点时,如果 registerWithEureka 配置为 true,则 eureka server 会报错 Cannot execute request on any known server
    registerWithEureka: false # 是否注册到 eureka 服务,默认为 true,当前已为 eureka server,且单点 eureka,故配置为 false
    fetchRegistry: false # 是否在本地缓存注册表信息,默认为 true,当前为单点 eureka server,不需要从其他 eureka 除获取注册表信息,更谈不上缓存,故配置为 false
    serviceUrl:
      # 配置其他 eureka 的地址,如果多台则逗号分隔。
      defaultZone: http://pkyShare:123456@${eureka.instance.hostname}:${server.port}/eureka/
#      defaultZone: http://pkyShare:123456@eureka7002.com:7002/eureka/,http://pkyShare:123456@eureka7003.com:7003/eureka/
2.2 创建配置中心模块

  创建 springcloud-config-server 模块。

  • pom.xml
     <!-- springcloud begin   -->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka</artifactId>
          <version>1.4.6.RELEASE</version>
     </dependency>
     <!-- 配置中心依赖 -->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-config-server</artifactId>
          <version>2.2.6.RELEASE</version>
     </dependency>
     <!-- springcloud end  -->
  • application.yml
server:
  port: 4001

spring:
  application:
    name: springcloud-config-server
  # 配置远程仓库
  cloud:
    config:
      server:
        git:
          # https 协议,不是 git
          uri: https://gitee.com/pkyshare/springcloud-config-server.git
          search-paths: /**  # 表示远程仓库中根路径下的所有文件
          username: 码云账号
          password: 码云密码

# eureka 配置
eureka:
  client:
    service-url:
      # eureka 服务端地址(即注册地址),若 eureka 开启了权限认证,则需要携带账号密码
      defaultZone: http://pkyShare:123456@eureka7001.com:7001/eureka/
#      defaultZone: http://pkyShare:123456@eureka7001.com:7001/eureka/,http://pkyShare:123456@eureka7002.com:7002/eureka/,http://pkyShare:123456@eureka7003.com:7003/eureka/
  • 启动类
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer // 表明自己是配置中心
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}
2.3 启动并测试

  启动后,在浏览器上输入:http://localhost:4001/master/eureka-dev.yml ,其中 master 是分支,结果如下图:

在这里插入图片描述
  表明配置中心已经成功读取了远程仓库的某个配置信息。接下来就是客户端通过配置中心读取远程仓库信息。

3 配置 Eureka 客户端

3.1 pom.xml

  在原有的依赖基础上引入以下依赖:

      <!--  配置    -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-config</artifactId>
      </dependency>
3.2 配置文件
  • 创建 bootstrap.yml 配置文件
spring:
  cloud:
    config:
      uri: http://localhost:4001 # 配置中心地址
      name: eureka # 配置文件名
      label: master # 分支名
      profile: dev # 环境

技术上,bootstrap.yml 是被一个父级的 Spring ApplicationContext 加载的。这个父级的 Spring ApplicationContext 是先加载的,在加载 application.yml 的 ApplicationContext 之前。当使用 Spring Cloud 的时候,配置信息一般是从配置中心加载的,为了取得配置信息(比如密码等),需要一些提早的引导配置。因此,把连接配置中心的信息放在 bootstrap.yml,用来加载在这个时期真正需要的配置信息。如果放在 application.yml 中,则无法加载到想要的数据。

  • 修改 application.yml,也可全部注释原来的配置。
spring:
  application:
    name: springcloud-eureka
3.3 启动 Eureka

  启动后,浏览器输入 http://localhost:7001/,并通过认证,如下图:
在这里插入图片描述

  表明客户端通过配置中心读取配置成功。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值