『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(上)(103)
source link: https://www.tuicool.com/articles/2e6RvaF
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
在程序运行期间,动态的更改内存中的配置,不知道各位老铁了解过不,或者在项目中用过。不是数据库改配置这种,是直接更改内存。之前说过分布式集中配置中心,百度的一款disconf分布式配置中心,但是disconf这个2016年之后就不在维护了。diamond是针对dubbo的一款分布式的配置框架也有6年没有维护了。Apollo(阿波罗)是携程框架部门研发的分布式配置中心。但是本次主要说springcloud,其实springcloud也有自己的分布式集中配置中心Spring Cloud Config。
源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(上)(103)/
(一)config配置中心介绍
- 为什么需要配置中心?
- 集中管理配置。
- 不同环境不同配置。
- 运行期间动态调整配置。
- 自动刷新。
-
Spring Cloud Config介绍
> Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server和Config Client两部分。Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置内容(也可使用Subversion、本地文件系统或Vault存储配置),因此可以方便的实现对配置的版本控制与内容审计。Config Client 是Config Server的客户端,用于操作存储在Config Server中的配置属性。
-
使用config实现配置中心服务端及客户端
> 首先新增git配置仓库中心,地址为:https://github.com/limingios/springcloudconfig.git,在仓库里增加如下配置文件
####(二) 服务端源码
10-ms-config-server
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
并在启动类上增加注解@EnableConfigServer
配置文件application.yml
server: port: 8080 spring: application: name: microservice-config-server cloud: config: server: git: uri: https://github.com/limingios/springcloudconfig.git # 配置Git仓库的地址 force-pull: true username: # Git仓库的账号 password: # Git仓库的密码
- 启动项目,访问地址:http://localhost:8080/ms-config/dev,得到整个项目的配置信息
里面有个version,其实跟git中的版本是一致的。
http://localhost:8080/ms-config-dev.properties
http://localhost:8080/task/ms-config-dev.properties
每次访问后,都会将文件通过server下载到本地
- config文件的映射规则
1.application 项目的名称
2.label 是分支名称
3.profile 就是类别 dev test
4.默认是 master -
各种配置方法见项目配置文件
客户端client,启动的时候其实就是config从server中获取一下配置文件,对应的参数放入内存中,不保存在本地。如果server-config挂了的话,只要clent不重启不影响client的。
####(三) 编写config配置中心客户端
spring cloud有一个【引导上下文】的概念,这是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载application. (yml或 properties)中的属性不同,引导上下文加载(bootstrap. )中的属性。配置在 bootstrap.*中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。
* 源码
10-ms-config-client
添加依赖
<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>
默认的application.yml配置文件,还需增加一个bootstrap.yml的配置文件
1.client端启动后,启动访问server端,从server端下载配置文件到【内存】中
2.访问对应的value中的值,直接就可以看到server端配置的属性
编写了一个Controller,value获取配置文件中的数据。这都是spring mvc的基础,这里就不在做阐述了。
(四)配置信息的加解密安全处理
在 Git仓库中明文存储配置属性的。很多场景下,对于某些敏感的配置内容(例如数据库账号、密码等),应当加密存储。 config server为配置内容的加密与解密提供了支持。
-
安装JCE
> config server的加解密功能依赖Java Cryptography Extension(JCE)
Java8 JCE下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
注意:就算有也要覆盖,负责会报错:Unable to initialize due to invalid secret key
下载JCE并解压,将其中的jar包覆盖到JDK/jre/lib/security目录中
-
对称加密
> config server提供了加密与解密的接口,分别是/encrypt与/decrypt
源码:10-ms-config-server-encryption
启动项目:注意填写加密的key。
获取加密信息(post方式):http://localhost:8080/encrypt
body中填写要加密的信息:www.idig8.com
获取到加密信息:9ef1e86a01b272fd75d72a0dc40161db938430c069a76d6d82a17b2b5a8e2cf2
将这个信息放入需要加密的信息中前面一定要加入{cipher}
{cipher} 英文就是暗号的意思,有了暗号才会给你解密的
注意:如果是properties 不需要加引号引入value值,如果是yml需要加入引号
获取解密信息 http://localhost:8080/decrypt
将刚才加密的信息进行解密9ef1e86a01b272fd75d72a0dc40161db938430c069a76d6d82a17b2b5a8e2cf2
直接访问http://localhost:8080/ms-config-encryption-dev.yml,得到密钥原文
说明 config server能自动解密配置内容。一些场景下,想要让 config server直接返回密文
本身,而并非解密后的内容,可设置spring.cloud.config.server.encrypt.enabled=false,这时可由 ConfigCIient自行解密。
PS:分布式集中配置中心Spring Cloud Config 确实功能很强大,这次咱们主要说下,如果制作server,client端如何获取,而且还说了加密和解密。下次咱们说说动态刷新配置这块。
>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:上一篇:已是最新文章
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK