SpringCloud Config 配置中心

2021-03-18 12:26

阅读:655

标签:label   desc   ica   ring   center   def   integer   rop   调用   

技术图片

 

 

 

Config 简介

分布式系统中,由于服务数量非常多,配置文件分散在不同微服务项目中,管理极其不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在Spring Cloud中,提供了Spring Cloud Config,它支持配置文件放在配置服务的本地,也支持配置文件放在远程仓库Git(GitHub、码云)。配置中心本质上是一个微服务,同样需要注册到Eureka服务中心!

一句话概括:统一管理所有微服务配置文件的一个微服务

配置中心,也是一个微服务,需要注册到注册中心

技术图片

【配置中心的架构图】

 

配置中心整合步骤

  1. 配置文件集中放在码云

  2. 配置中心获取码云配置文件

  3. 用户服务获取配置中心文件

 

Git配置管理

远程Git仓库

  • 知名的Git远程仓库有国外的GitHub和国内的码云(gitee);

  • GitHub主服务在外网,访问经常不稳定,如果希望服务稳定,可以使用码云;

  • 码云访问地址:http://gitee.com

 

创建远程仓库

  1. 首先使用码云上的git仓库需要先注册账户

  2. 账户注册完成,然后使用账户登录码云控制台并创建公开仓库

  3. 配置仓库 名称和路径

技术图片

 

创建配置文件

1. 在新建的仓库中创建需要被统一配置管理的配置文件

技术图片

 

  • 配置文件的命名方式:{application}-{profile}.yml或{application}-{profile}.properties

  • application为应用名称

  • profile用于区分开发环境dev,测试环境test,生产环境pro等

    • 开发环境 user-dev.yml

    • 测试环境 user-test.yml

    • 生产环境 user-pro.yml

 

2. 将user-service工程里的配置文件application.yml内容复制作为user-dev.yml文件内容

技术图片

 

3. 创建完user-dev.yml配置文件之后,gitee中的仓库如下:

技术图片

搭建配置中心微服务

实现步骤:

  1. 创建配置中心SpringBoot项目config-server

  2. 勾选Starter:配置中心,Eureka客户端

  3. 在启动引导类上加@EnableConfigServer注解

  4. 修改配置文件:端口,应用名称,注册中心地址,码云仓库地址

  5. 启动测试,测试配置文件实时同步

实现过程:

 

1. 创建配置中心SpringBoot项目config-server

2. pom.xml 配置文件

xml version="1.0" encoding="UTF-8"?>
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    modelVersion>4.0.0modelVersion>
    parent>
        groupId>org.springframework.bootgroupId>
        artifactId>spring-boot-starter-parentartifactId>
        version>2.1.9.RELEASEversion>
        relativePath/> 
    parent>
    groupId>com.zyugroupId>
    artifactId>config-serviceartifactId>
    version>0.0.1-SNAPSHOTversion>
    name>config-servicename>
    description>Demo project for Spring Bootdescription>

    properties>
        java.version>1.8java.version>
    properties>

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

        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starter-testartifactId>
            scope>testscope>
            exclusions>
                exclusion>
                    groupId>org.junit.vintagegroupId>
                    artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>
    dependencies>

    
    dependencyManagement>
        dependencies>
            dependency>
                groupId>org.springframework.cloudgroupId>
                artifactId>spring-cloud-dependenciesartifactId>
                version>Greenwich.SR3version>
                type>pomtype>
                scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    build>
        plugins>
            plugin>
                groupId>org.springframework.bootgroupId>
                artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

 

3. 启动类:创建配置中心工程config_server的启动类ConfigServerApplication

@SpringBootApplication
@EnableDiscoveryClient//开启Eureka客户端发现功能
@EnableConfigServer //开启配置服务支持
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class,args);
    }
}

 

4. 配置文件:创建配置中心工程config_server的配置文件application.yml

server:
  port: 12000

spring:
  # 应用名称
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/zyulike/zyu-spring-cloud-config.git

# 注册中心地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  • 注意:上述spring.cloud.config.server.git.uri是在码云创建的仓库地址

5. 启动测试:启动eureka注册中心和配置中心;

  • 访问http://localhost:12000/user-dev.yml查看能否输出码云存储管理的user-dev.yml文件
  • 技术图片
  • 并且可以在gitee上修改user-dev.yml,然后刷新上述测试地址也能及时更新数据

 

服务去获取配置中心配置

关于application.yml和bootstrap.yml文件的说明:
  • bootstrap.yml文件是SpringBoot的默认配置文件,而且其加载时间相比于application.yml更早。
  • bootstrap.yml和application.yml都是默认配置文件,但定位不同
    • bootstrap.yml相当于项目启动的引导文件
    • application.yml文件是微服务的常规配置参数,变化比较频繁
  • 搭配spring-cloud-config使application.yml的配置可以动态替换。

目标:改造user-service工程,配置文件不再由微服务项目提供,而是从配置中心获取。

实现步骤:

  1. 在user_service服务中,添加Config的starter依赖

  2. 删除application.yml配置文件,新增bootstrap.yml配置文件

  3. 配置bootstrap.yml配置文件:

    • 配置中心相关配置(配置文件前缀、后缀,仓库分支,是否开启配置中心)

    • 注册中心地址

  4. 启动服务,测试效果

实现过程:

 

1. 添加依赖


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

2. 修改配置

  • 删除user-service工程的application.yml文件

  • 创建user-service工程bootstrap.yml配置文件,配置内容如下

# 注册中心地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
# 配置中心相关配置
# 使用配置中心
spring:
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-server    # 配置中心服务id
      name: user  # 与远程仓库中的配置文件的application和profile保持一致,{application}-{profile}.yml
      profile: dev
      label: master   # 远程仓库中的分支保持一致

启动测试:

  • 依次启动:注册中心、配置中心、用户中心user-service

技术图片

 

  • 如果启动没报错,其实已经使用上配置中心内容了

  • 可以在服务中心查看也可以检验user-service的服务

技术图片

 

配置中心存在的问题

复现问题步骤:

1. 修改远程Git配置

  • 修改在码云上的user-dev.yml文件,添加一个属性test.name

技术图片

 

 2. 修改UserController

@RestController
@RequestMapping("/user")
public class UserController {

    @Value("${server.port}")
    private String port;

    @Value("${test.name}")
    private String name;

    @Autowired
    UserService userService;

    //根据id查询
    @RequestMapping("/findById")
    public User findById(Integer id) {
        System.out.println("服务【"+port+"】被调用");
        User user = userService.findById(id);
        user.setNote("服务【"+port+"】被调用");
        user.setName(name);
        return user;
    }
}

测试:

  • 依次启动Eureka,配置中心,用户微服务;

  • 访问用户微服务,查看输出内容。我们修改的user-dev.yml并没有发生立即发生变化。但是配置中心的配置文件内容发生了变化。

技术图片

 

 结论:通过浏览器输出结果发现,我们对于Git仓库中的配置文件的修改,并没有及时更新到user-service微服务,只有重启用户微服务才能生效。

==SpringCloud Bus,解决上述问题,实现配置自动更新。==

 

SpringCloud Config 配置中心

标签:label   desc   ica   ring   center   def   integer   rop   调用   

原文地址:https://www.cnblogs.com/zyulike/p/13915271.html


评论


亲,登录后才可以留言!