微服务实战系列之--Spring Cloud Config Server / 2020.10.29


Spring Cloud微服务配置中心-Config Server_java

配置中心概述


    对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护。


微服务的配置管理一般有以下需求:



集中配置管理。一个微服务架构中可能有成百上千个微服务,所以集中配置管理是很重要的。

不同环境不同配置比如数据源配置在不同环境(开发,生产,测试)中是不同的。

运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连接池大小等

配置修改后可自动更新。如配置内容发生变化,微服务可以自动更新配置
综上所述对于微服务架构而言,一套统一的,通用的管理配置机制是不可缺少的总要组成部分。常见的做法就是通过配置服务器进行管理。



常见配置中心


Spring Cloud Config

为分布式系统中的外部配置提供服务器和客户端支持。

Apollo(阿波罗)

是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

Disconf 

专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」包括 百度、滴滴出行、银联、网易、拉勾网、苏宁易购、顺丰科技 等知名互联网公司正在使用!


Spring Cloud微服务配置中心-Config Server_java_02


目前业界比较流行的配置中心主要为Spring Cloud Config Server与Apollo,本文以Config Server为例,使用最新版本Spring Cloud为大家展现配置中心的详细实现。



Maven工程建立


切记引入Spring Cloud的依赖,关键如下:



<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type></dependency>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>


创建Config Server Module


选择Spring Cloud Config ->Config Server 


Spring Cloud微服务配置中心-Config Server_java_03


创建完毕会默认添加依赖


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

主类添加@EnableConfigServer,开启配置中心功能



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

resources下添加application.yml,并配置如下。这里使用连接gitlab的方式:



server:port: 8001spring:application:name: hv-conifgservercloud:config:server:git:default-label: masteruri: http://10.60.253.36/hv/houmourv.git #gitlab地址          search-paths: #gitlab上配置文件的搜索地址,非本地应用的地址- configusername: humour          password: 123456789

添加两个配置文件如下

Spring Cloud微服务配置中心-Config Server_java_04

启动config server项目,输入

http://localhost:8001/hv-administration/dev 返回如下


{"name":"hv-administration","profiles":["dev"],"label":null,"version":"38d4ee29f192b2539c7344a8e10eb5e4a551fcd1","state":null,"propertySources":[{"name":"http://10.60.253.36/hv/houmourv.git/config/hv-administration-dev.properties","source":{"hello":"dev"}}]}


配置规则详解

还记得最开始我们建的那几个测试文件的命名规则么?

  • hv-administration-dev.properties

  • hv-administration-prod.properties

这里的application可以自定义为其它的名称,这里可以用应用的名称,即应用名,后边的dev、stable、prod这些都可以视为一个应用下多个不同的配置文件,可以当做环境名,以下均用环境名代称。

Config支持我们使用的请求的参数规则为:

  • / { 应用名 } / { 环境名 } [ / { 分支名 } ]

  • / { 应用名 } - { 环境名 }.yml

  • / { 应用名 } - { 环境名 }.properties

  • / { 分支名 } / { 应用名 } - { 环境名 }.yml

  • / { 分支名 } / { 应用名 } - { 环境名 }.properties

注意:

  1. 第一个规则的分支名是可以省略的,默认是master分支

  2. 无论你的配置文件是properties,还是yml,只要是应用名+环境名能匹配到这个配置文件,那么就能取到

  3. 如果是想直接定位到没有写环境名的默认配置,那么就可以使用default去匹配没有环境名的配置文件

  4. 使用第一个规则会匹配到默认配置

  5. 如果直接使用应用名来匹配,会出现404错误,此时可以加上分支名匹配到默认配置文件

  6. 如果配置文件的命名很由多个-分隔,此时直接使用这个文件名去匹配的话,会出现直接将内容以源配置文件内容直接返回,内容前可能会有默认配置文件的内容(已测试)


Config Client


创建配置中心客户端,选择Spring Cloud Config ->Config Client,这里命名为hv-administration,并添加web依赖,pom如下 


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

resources目录创建文件bootstrap.yml,添加如下内容


server:port: 8088spring:application:name: hv-administrationcloud:config:uri: http://localhost:8001   #配置中心地址      profile: dev    #计划读取配置中心的哪个配置            文件,这里读取hv-administration-dev.properties      fail-fast: true

dev文件内容如下

Spring Cloud微服务配置中心-Config Server_java_05

新建Controller如下


@RestControllerpublic class HelloController {@Value("${hello}")private String name;@RequestMapping("/tell-me-your-name")public String tellName() {return this.name;    }}

启动hv-administration,控制台提示

 

Fetching config from server at : http://localhost:8001


浏览器输入 http://localhost:8088/tell-me-your-name


Spring Cloud微服务配置中心-Config Server_java_06

到此,一个以连接Git方式的简单的配置中心就实现完毕了。






如果您喜欢本公众号,请添加至星标,最新干货更新不错过!


Spring Cloud微服务配置中心-Config Server_java_07


Spring Cloud微服务配置中心-Config Server_java_08