一、为什么要统一管理微服务配置

对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护。
微服务的配置管理一般有以下需求:
1.集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理是很重要的。
2.不同环境不同配置,比如数据源配置在不同环境(开发,生产,测试)中是不同的。
3.运行期间可动态调整。
4.配置修改后可自动更新。
好在Spring Cloud Config已经全部实现了上面几点。

二、Spring Cloud Config简介和使用

2.1原理

Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Client 和 Config Server两个部分。原理是所有的配置信息都存储在Config Server,所有的微服务都指向Config Server,
各个微服务启动时都会请求Config Server来获取配置信息,然后缓存到本地以提高性能。

<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36" version="8.5.3" editor="www.draw.io"><diagram>5ZpLk6IwEIB/Ta6WEJ5HcXD2MlVT62F3j1mIkBokVoij7q/fBAICwVrLxdEZvRg6T75+0I0COF/vnxnapC80xhkwp/EewCdgmoZlOOJLSg6VxDO9SpAwEqtBR8GS/MFKOFXSLYlx0RnIKc042XSFEc1zHPGODDFGd91hK5p1d92gBGuCZYQyXfqDxDyt78I9yr9hkqT1zobjVz2/UfSWMLrN1X7AhKvyU3WvUb2WutEiRTHdtUQwBHDOKOVVa72f40yyrbFV8xYneptzM5zzcyaY1YR3lG1xfeLyXPxQsyjvBsvxBoDBLiUcLzcokr07oX0hS/k6U90rkmVzmlFWzoWL8iPkahvMON6fPKrRABCGhekac3YQQ9QEWyFTJuWry91RPwZUsrSlG0/JkDKJpFn4iEU0FJlhSlCjNKf5iiRCNs+IPP+Y0CD0/bGgOXYHWkOoTW06QA2OQM36PLbV+OMNjMv+PJigfztMzgAmJxMbBMUG5aKdyLbml9UQsXh71N26qwlv6K/uIxC2pjck7GmEX0jEaIHZOxEozOlM4ybulHfhFJzRN1zjyWmOe8SUCGUkycVlJMhgIQ8kNyJynJnqWJM4ltsMauOor+k44N1u6GgYt7j7A9jNEbD7/8Kum+uXwa5FlA/kXmfzp8HPvy54LdB8JHhDA9+E7aWAL/CMGZ8dJzBHewIa3TgBnYH4bA9wc8fgdkY5hPN4JitMaWkZKgoSddngPeE/pRlNLNtS179k32QqUr3q+hUzIg4nrbQ0N8GGHapJdn35q2OKONYK1h5RcUi6ZZEapc7NEUswbxuFDr4FdohrLWM4Q5y8d08xBFvt8EqJzA5OVG9WPyWsDq8mtQvW3jqNG9UL9Z/L1S1rC5Wqb+76PGvQy77/sAa7bQsX69W+Ix3a0wt12NQDfR+/gg7PKEIv1+H4fmvdm986PXe7VOdGP67b19P5QEUdesALQeCC0AbeAvgOCH3gifYTCF0QPIFZqNnFl0lFDGhOuslI89ahZUT1q6Kxix5joHJ/aHWYtqYOS09yrqaOgTL/odUBbfeW6tDfCTwTGTe/4w3VoBcp2shmjDgqOGWnIH1Qrm71EgLLmuhxZajIGeOFoKGX9Xf9aK8Lu86z3bvls72Xz7nGSDm5c718robYiV4WCAIRwKTfhA7wRNtvRTIbzBYgKCXBDPjWI8U2odRebLNc3UMN40rBzdTfQ9y1i9bvTdou2vpZ9gYuano99fXVcn7N1V3IHs1HxeXx9+pq+PFPATD8Cw==</diagram></mxfile>

2.2编写Config Server

1.在Git仓库https://github.com/2YSP/spring-cloud-config-repo(可以使用自己的仓库)新建几个配置文件,例如:

内容分别为:
profile=dev-1.0
profile=production-1.0
profile=test-1.0
profile=default-1.0
2.新建一个SpringBoot项目microservice-config-server,并添加以下依赖

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

3.在启动类添加 @EnableConfigServer注解
4.编写application.yml文件

server:
port: 8080
spring:
application:
name: microservice-config-server
cloud:
config:
server:
git:
# 配置Git仓库的地址
uri: https://github.com/2YSP/spring-cloud-config-repo.git
# 配置Git仓库的用户名
username: 2YSP
# 配置Git仓库的密码
password: XX

这样就完成了,可以使用端点来获取配置文件,端点与配置文件的映射规则如下:
/{application}/{profile}[/{lable}]
/{application}-{profile}.yml
/{lable}/{application}-{profile}.yml
/{application}-{profile}.properties
/{lable}/{application}-{profile}.properties

{application}表示微服务的名称,{profile}代表环境,{lable}表示Git仓库的分支,默认是master。
本例如果要访问microservice-foo-dev.properties,则可以访问这些URL:
http://localhost:8080/microservice-foo/dev
http://localhost:8080/microservice-foo-dev.properties
http://localhost:8080/microservice-foo-dev.yml

2.3编写Config Client

1.创建一个SpringBoot工程,ArtifactId为microservice-config-client,并添加以下依赖

<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

2.编写配置文件application.yml

server:
port: 8081

3.创建配置文件bootstrap.yml,并添加以下内容。

spring:
application:
# 对应Config Server所获取的配置文件的{application}
name: microservice-foo
cloud:
config:
uri: http://localhost:8080/
#对应config server所获取配置文件的{profile}
profile: dev
# 指定Git仓库的分支,对应config server所获取配置文件的{label}
label: master

需要注意的是,以上属性应配置在bootstrap.yml而不是application.yml文件中,否则部分配置就不能正常工作。
4.编写Controller

@RestController
public class ConfigClientController { @Value("${profile}")
private String profile; @GetMapping("/profile")
public String hello(){
return this.profile;
}
}

这里通过注解 @Value("${profile}") 来绑定Git仓库的profile属性。
5.测试
先启动microservice-config-server,再启动microservice-config-client,访问http://localhost:8081/profile即可获得以下结果。
dev-1.0
说明能够正常的获取Git仓库的配置信息。

三、配置文件的手动刷新和自动刷新

3.1通过/refresh端点手动刷新

1.复制项目microservice-config-client更改为microservice-config-client-refresh
2.为项目添加spring-boot-starter-actuator依赖,如果有了就不添加了。
3.在Controller类上添加@RefreshScope注解

@RestController
@RefreshScope
public class ConfigClientController { @Value("${profile}")
private String profile; @GetMapping("/profile")
public String hello(){
return this.profile;
}
}

4.修改Git仓库中microservice-foo-dev.properties文件的内容,然后先发送POST请求到http://localhost:8081/refresh,再访问http://localhost:8081/refresh即可获取最新的配置。

3.2使用Spring Cloud Bus 实现自动刷新配置

1.首先安装RabbitMQ,安装步骤这里不介绍我的博客里有。
2.为项目添加以下依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

3.在bootstrap.yml中添加以下内容

spring:
application:
# 对应Config Server所获取的配置文件的{application}
name: microservice-foo
cloud:
config:
uri: http://localhost:8080/
#对应config server所获取配置文件的{profile}
profile: dev
# 指定Git仓库的分支,对应config server所获取配置文件的{label}
label: master
rabbitmq:
host: localhost
port: 5672 #默认端口 5672
username: guest
password: guest

四、Config Server的高可用

【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置的更多相关文章

  1. 9.Spring Cloud Config统一管理微服务配置

    Spring Cloud Config统一管理微服务配置 9.1. 为什么要统一管理微服务配置 9.2. Spring Cloud Config简介 Spring Cloud Config为分布式系统 ...

  2. 使用Spring Cloud Config统一管理配置,别再到处放配置文件了

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 可配置是一个成熟软件系统应该提供的特性,而配置管理对于大型系统就显得十分重要,特别是对于拥有多个应用的微服务系统.可喜的是, ...

  3. .NET Core微服务之基于Steeltoe使用Spring Cloud Config统一管理配置

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 =>  Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...

  4. SpringCloud学习笔记(7):使用Spring Cloud Config配置中心

    简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...

  5. Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务

    上一篇文章,讲了SpringCloudConfig 集成Git仓库,这一篇我们讲一下SpringCloudConfig 配和 Eureka 注册中心一起使用 在分布式系统中,由于服务数量巨多,为了方便 ...

  6. Spring Cloud Config实现集群配置中心

    Spring Cloud Config为分布式系统提供了配置服务器和配置客户端,可以管理集群中的配置文件.使用Git.SVN等版本管理系统存放配置文件,配置服务器会到版本管理系统获取配置,集群中的配置 ...

  7. Spring Cloud config之一:分布式配置中心入门介绍

    Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...

  8. Spring Cloud Config 1 (分布式配置中心)

    spring cloud config是spring cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端和客户端两部分. 服务端也被称为 ...

  9. Spring Cloud Config入门(本地配置)

    spring cloud config 简介 Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持.使用Config Server,您可以在所有环境中管理应用程序的外 ...

随机推荐

  1. [Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2976  Solved: 1894[Submit] ...

  2. java序列化,看这篇就够了

    一.序列化的含义.意义及使用场景二.序列化实现的方式1.Serializable1.1 普通序列化1.2 成员是引用的序列化1.3 同一对象序列化多次的机制1.4 java序列化算法潜在的问题1.5 ...

  3. 【TFS 2017 CI/CD系列 - 01】-- Agent篇

    一.环境要求: PowerShell 3.0 或者更高版本 VS2015或者更高版本 二.下载Agent: 用浏览器打开TFS,[Settings]--> [Agent Pools]--> ...

  4. OpenGL蓝宝书第七章:立体天空和纹理折射、双纹理(下)

    对照了蓝宝书,才知道红宝书的长处. reflect函数的原理在红宝书中有说明,仅仅有对照了红宝书,才知道红宝书的定位:高级工具书. 蓝宝书作为入门级书籍,以较快的速度让读者敲到代码去思考,总遗留了须要 ...

  5. Cocos2d-x 3.1.1 学习日志12--一Cocos2dx3.1.1移植到Android平台的方法(最实用最有效的!!)

    须要用到工具(依照顺序): 1.JDK 2.NDK 3.ANT 4.Adt-bundle-windows 将JDK文件夹下的bin文件夹路径加入到系统环境变量中. 解压NDK 解压Adt-bundle ...

  6. Windows server 2003 + IIS6 搭建Asp.net MVC执行环境

    安装.Net Framework4.0. 下载地址: http://www.microsoft.com/zh-cn/download/details.aspx?id=17718  安装WindowsS ...

  7. Android Client and PHP Server

    1 FEApplication https://github.com/eltld/FEApplication https://github.com/eltld/FE-web https://githu ...

  8. Linux_C——动态库,静态库

    /usr/lib /lib:标准系统库文件          库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的.它们通常有一组相互关联的函数组成以          执行某项常见的任 ...

  9. 【bzoj4401】块的计数

    首先,块的大小确定的话,可以发现方案最多只有1种 然后就可以O(nsqrt(n))搞,不过会TLE 接着我们又发现,一个节点可以作一个块的根,当且仅当该节点的size能被块的大小整除 然后就可以O(n ...

  10. YTU 2975: 我的编号

    2975: 我的编号 时间限制: 1 Sec  内存限制: 128 MB 提交: 42  解决: 15 题目描述 建立一个学生链表,每个链表结点含有学生的基本信息,编号和姓名.现在n个学生站成一列,根 ...