SpringCloud之分布式配置中心Spring Cloud Config实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/smartdt/article/details/79061906

一、简介

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。Spring Cloud Config实现了对服务端和客户端中环境变量和属性配置的抽象映射,所以它除了适用于Spring构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。由于Spring Cloud Config实现的配置中心默认采用Git来存储配置信息,所以使用Spring Cloud Config构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,并且可以通过Git客户端工具来方便地管理和访问配置内容。

  • 在spring cloud config组件中,分两个角色,一是config server,二是config client。

二、构建配置中心config-server

(1)新建一个SpringBoot项目,命令无要求,需要添加config-server的依赖。

(2)pom.xml

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
(3)入口类

@EnableConfigServer
@SpringBootApplication
public class SpringcloudconfigserverApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringcloudconfigserverApplication.class, args);
	}
}
(4)application.yml

server:
  port: 5588

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/smartdt/springcloudconfig.git #配置Git仓库位置。
          searchPaths: config-repo #配置仓库路径下的相对搜索位置,可以配置多个。
          username: username #访问 Git 仓库的用户名。
          password: password #访问 Git 仓库的用户密码。
          label: master #配置仓库的分支
          ###如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写。
其中Git的配置信息分别表示如下内容:
  1. spring.cloud.config.server.git.uri: 配置Git仓库位置。
  2. spring.cloud.config.server.git.searchPaths: 配置仓库路径下的相对搜索位置,可以配置多个。
  3. spring.cloud.config.server.git.username:访问Git仓库的用户名。
  4. spring.cloud.config.server.git.password:访问Git仓库的用户密码。
  5. 如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写。
到这里,使用一个通过Spring Cloud Config实现,并使用Git管理配置内容的分布式。

(5)在Git配置信息中指定的仓库位置,在https://gitee.com/smartdt/springcloudconfig.git下建立config-repo目录作为配置仓库,并根据不同环境新建下面4个配置文件:


  • configspace-dev.properties:
from=git-dev-v1.0 by springcloud config-server
username=springcloud
password=********
  • configspace-prod.properties:
from=git-prod-v1.0 by springcloud config-server
  • configspace-test.properties:
from=git-test-v1.0 by springcloud config-server
  • configspace.properties
from=git-default-v1.0 by springcloud config server.
(6)测试:

完成了这些准备工作之后,我们就可以通过浏览器、POSTMAN或CURL等工具直接来访问我们的配置内容了。访问配置信息的URL与配置文件的映射关系如下所示:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
  • 访问默认:http://localhost:5588/configspace/*

  • 访问http://localhost:5588/configspace/dev

  • 访问http://localhost:5588/configspace/test

  • 访问:http://localhost:5588/configspace/prod



三、客户端配置映射config-client

(1)新建一个SpringBoot项目,命令无要求,需要添加config的依赖。

(2)pom.xml

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

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
</dependencies>
(2)新建bootstrap.properties

spring.application.name=configspace
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri= http://localhost:5588/
server.port=5589
  • spring.application.name:对应配置文件规则中的{application} 部分。在这里也就是configspace;
  • spring.cloud.config.profile:对应配置文件规则中的 {profile} 部分。在这里也就是dev;
  • spring.cloud.config.label:对应配置文件规则中的 {label} 部分。在这里就是master;
  • spring.cloud.config.uri:配置中心conigg-server的地址。在这里就是http://localhost:5588/
(3)新建RESTFful接口ConfigController口来返回配置中心的 from 属性

@RefreshScope
@RestController
public class ConfigController {

    @Value("${from}")
    private String from;
    @Value("${username}")
    private String username;
    @Value("${password}")
    private String password;

    @RequestMapping("/from")
    public String from() {
        return this.from + "~user:" + this.username + "~pass:" + this.password;
    }
}
(4)测试

这里配置的http://localhost:5588/,master分支,dev的信息:

git-dev-1.0v and by smartdt~user:springcloudconfig~pass:********


通过访问http://localhost:5589/from,得到了http://localhost:5588/configspace/dev分支下from、username、password的信息。


四、服务端详解

在动手实践了上面关于SpringCloud Config的基础入门内容之后,在这里我们深入理解一下它是如何运作起来的。
主要包含下面几个要素:

  • 远程Git仓库:用来存储配置文件的地方,上例中我们用来存储针对应用名为configspace的多环境配置文件:configspace-{profile}.properties。
  • Config Server: 这是我们上面构建的分布式配置中心,config-server工程,在该工程中指定了所要连接的Git仓库位置以及账户、密码等连接信息。
  • 本地Git仓库:在Config Server的文件系统中,每次客户端请求获取配置信息时,Config Server从Git仓库中获取最新配置到本地,然后在本地Git仓库中读取并返回。当远程仓库无法获取时,直接将本地内容返回。
  • Service A、Service B: 具体的微服务应用,它们指定了ConfigServer的地址,从而实现从外部化获取应用自己要用的配置信息。这些应用在启动的时候,会向Config Server请求获取配置信息来进行加载。


客户端应用从配置管理中获取配置信息遵从下面的执行流程:

  1. 应用启动时,根据bootstrap.properties中配置的应用名{application}、环境名{profile}、分支名{label}, 向ConfigServer请求获取配置信息。
  2. Config Server根据自己维护的Git仓库信息和客户端传递过来的配置定位信息去查找配置信息。
  3. 通过git clone命令将找到的配置信息下载到Config Server的文件系统中。
  4. Config Server创建Spring的ApplicalionContext实例,并从Git本地仓库中加载配置文件,最后将这些配置内容读取出来返回给客户端应用。
  5. 客户端应用在获得外部配置文件后加载到客户端的ApplicationContext实例,该配置内容的优先级高于客户端Jar包内部的配置内容, 所以在Jar包中重复的内容将不再被加载。


参考资料《Spring Cloud微服务实战》


新手一枚,欢迎拍砖~ ~ ~





























阅读更多
换一批

没有更多推荐了,返回首页