飞道的博客

微服务---分布式配置中心Config

243人阅读  评论(0)

一、简介

我们知道每一个服务都有着大量的配置,然而其中很多都是相同的配置,并且每次配置后都要重启。SpringCloudConfig则可以通过集中化的外部配置进行统一的管理,并且无需重启应用使得配置修改生效.

SpringCloud基于C/S架构,分为服务器端和客户端。

  1. 服务器端(分布式配置中心):用来连接仓库,并为客户端提供获取配置信息等接口。
  2. 客户端:各个服务实例,从分布式配置中心获取应用资源与业务相关的配置信息.

二、简单使用

0.创建配置中心连接的配置仓库

仓库详情:
配置文件内容:
提交仓库指令:

配置文件命名:配置文件不要随便命名,需要遵循一定的规范

1.搭建服务器端(Config Server 6001)

  1. 导入依赖:注意是server,不要导错了
      <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-config-server</artifactId>
       </dependency>

2.修改yml文件,设置配置中心连接的仓库信息

  cloud:
   #config服务器端配置
   config:
     server:
       git:
         uri: git@github.com:wantao666/SpringCloud2020-config.git #github项目地址
         search-paths:
           -SpringCloud2020-config
         default-label: master  #读取分支
  1. 启动类上加上@EnableConfigServer注解
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class ConfigMain6001 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigMain6001.class, args);
    }
}

完成后访问localhost:6001/master/config-dev.yml可以直接访问到存储在github的配置文件

2.搭建客户端(Config Client 6002)

  1. 导入依赖
      <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-config</artifactId>
       </dependency>
  1. 新建bootstrap.yml文件

    application.yml:用户级配置文件
    bootstrap.yml:系统级配置文件,优先级更高

    cloud:
    #config客户端配置
    config:
    #读取配置文件${uri}/${label}/${name}-${profile}.yml 即:http://localhost:6001/master/config-dev.yml
    label: master #分支
    name: config
    profile: dev
    uri: http://localhost:6001
    
  2. 创建接口访问配置信息

@RestController
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

配置完成后,访问http://localhost:6002/config/info

3.动态刷新

当我们修改掉github中配置文件信息,不重启访问Config Server 6001,发现配置信息也修改掉了,但是我们不重启访问Config Client 6002,发现配置信息并没有随着github中的配置文件信息被修改掉,只有重启才能显示最新的配置信息。但是很明显,我们需要在微服务不重启的情况下使得修改的配置文件信息生效,这就是动态刷新.

1.手动动态刷新
  1. 导入actuator依赖,对项目进行监控
      <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>
  1. 暴露actuator监控的结点
#暴露actuator监控所有结点
management:
 endpoints:
   web:
     exposure:
       include: "*"
  1. 在控制类上加上@RefreshScope注解
@RestController
@RefreshScope
public class ConfigClientController {
   @Value("${config.info}")
   private String configInfo;

   @GetMapping("/config/info")
   public String getConfigInfo() {
       return configInfo;
   }
}

4.发送post请求:http://localhost:6002/actuator/refresh

注意:
出现状况:配置完成后启动Config Client 6002没有报错,但是程序自己又结束了,启动不起来

解决方法:忘记导入web依赖了…😢

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

相关源码:https://github.com/wantao666/SpringCloud2020


转载:https://blog.csdn.net/qq_45453266/article/details/104969237
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场