SpringCloud config分布式配置

SpringCloud config分布式配置

概述

分布式系统面临的--配置文件的问题

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。Springcloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个配置文件--application.yaml,那上百的配置文件要修改起来,岂不是要发疯!

#### 什么是SpringCloud config分布式配置中心

2018121414050166

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

Spring Cloud Config分为服务端客户端两部分;

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

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

SpringCloud Config分布式配置中心能干嘛

  • 集中管理配置文件

  • 不同环境,不同配置,动态化的配置更新,分环境部署,比如/dev /test /prod /beta /relaese

  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。

  • 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置。

  • 将配置信息以REST接口的形式暴露。

SpringCloud Config分布式配置中心与github整合

由于Spring Cloud Config 默认使用Git来存储配置文件(也有其他方式,比如支持SVN和本地文件),但是最推荐的还是Git,而且使用的是http /https访问的形式;

服务端连接git配置

 # 第一步 添加到本地仓库
 $ git add .  
 
 # 第二步 查看当前状态
 $ git status
 On branch master
 Your branch is up to date with 'origin/master'.
 nothing to commit
 , working tree clean  # 我已经提交过了,所以说nothing to commit
 
 # 第三步 提交
 $ git commit -m "first commit"
 
 # 第四步 提交到远程仓库
 $ git push origin master

服务端连接Git配置

第一步:导入依赖

 <dependencies>
     <!--config-->
     <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-config-server</artifactId>
       <version>2.1.1.RELEASE</version>
     </dependency>
     <!--actuator 完善监控信息-->
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
 </dependencies>

第二步:编写配置

 server:
  port: 3344   # 自定义的端口号
 
 spring:
  application:
    name: springcloud-config-server
   # 连接远程仓库
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/code-dog-1/springcloud_config.git # https的 不是git的
 # 通过 config-server 可以连接到git,访问其中的资源以及配置

第三步:编写测试程序

 @SpringBootApplication
 @EnableConfigServer  // 开启springcloud-config服务端
 public class Config_Server_3344 {
     public static void main(String[] args) {
         SpringApplication.run(Config_Server_3344.class, args);
    }
 }

客户端连接服务端访问远程

第一步:导入依赖

 <dependencies>
     <!--config-->
     <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-config</artifactId>
       <version>2.1.1.RELEASE</version>
     </dependency>
     <!--actuator 完善监控信息-->
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
 </dependencies>

第二步:

1) 编写bootstrap.yaml配置(bootstrap.yaml是系统级别的配置)

 # 系统级别的配置
 spring:
  cloud:
    config:
      name: config-client  # 需要从git上读取的资源名称,不需要后缀
      profile: test
      label: master
      uri: http://localhost:3344

2) 编写application.yaml配置(application.yaml是用户级别的配置)

 # 用户级别的配置
 spring:
  application:
    name: springcloud-config-client-3355

第三步:写出对应的Controller

 @RestController
 public class ConfigClientController {
 
     // 调用git上面的远程服务
     @Value("${spring.application.name}")
     private String applicationName;
 
     @Value("${eureka.client.service-url.defaultZone}")
     private String eurekaServer;
 
     @Value("${server.port}")
     private String port;
 
     @RequestMapping("/config")
     public String getConfig(){
         return "applicationName" + applicationName
                 + "eurekaServer" + eurekaServer
                 + "port" + port;
    }
 
 }

第四步:测试程序

 @SpringBootApplication
 public class ConfigClient_3355 {
     public static void main(String[] args) {
         SpringApplication.run(ConfigClient_3355.class, args);
    }
 }

 

posted @ 2021-10-04 23:09  代码狗1  阅读(50)  评论(0)    收藏  举报