前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(上)(103)

『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(上)(103)

作者头像
IT架构圈
发布2019-07-12 14:38:48
6540
发布2019-07-12 14:38:48
举报
文章被收录于专栏:IT架构圈

在程序运行期间,动态的更改内存中的配置,不知道各位老铁了解过不,或者在项目中用过。不是数据库改配置这种,是直接更改内存。之前说过分布式集中配置中心,百度的一款disconf分布式配置中心,但是disconf这个2016年之后就不在维护了。diamond是针对dubbo的一款分布式的配置框架也有6年没有维护了。Apollo(阿波罗)是携程框架部门研发的分布式配置中心。但是本次主要说springcloud,其实springcloud也有自己的分布式集中配置中心Spring Cloud Config。源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(上)(103)/

(一)config配置中心介绍
  • 为什么需要配置中心?
  1. 集中管理配置。
  2. 不同环境不同配置。
  3. 运行期间动态调整配置。
  4. 自动刷新。
  • Spring Cloud Config介绍

Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server和Config Client两部分。Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置内容(也可使用Subversion、本地文件系统或Vault存储配置),因此可以方便的实现对配置的版本控制与内容审计。Config Client 是Config Server的客户端,用于操作存储在Config Server中的配置属性。

官网https://github.com/spring-cloud/spring-cloud-config

  • 使用config实现配置中心服务端及客户端

首先新增git配置仓库中心,地址为:https://github.com/limingios/springcloudconfig.git,在仓库里增加如下配置文件

(二) 服务端源码

10-ms-config-server

添加依赖

代码语言:javascript
复制
 <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-config-server</artifactId>    </dependency>

并在启动类上增加注解@EnableConfigServer

配置文件application.yml

代码语言:javascript
复制
server:  port: 8080spring:  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

添加依赖

代码语言:javascript
复制
 <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端如何获取,而且还说了加密和解密。下次咱们说说动态刷新配置这块。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)config配置中心介绍
  • (二) 服务端源码
  • (三) 编写config配置中心客户端
  • (四)配置信息的加解密安全处理
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档