详解Spring Cloud Config

  • Spring Cloud Config是Spring Cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端和客户端两个部分。

  • Spring Cloud Config实现的配置中心默认采用Git来存储配置信息,所以使用Spring Cloud Config实现的配置服务器,天然就支持对微服务应用配置信息的版本管理,并且可以通过Git客户端工具来方便管理和访问配置内容。

  • 访问 http://localhost:8888/{application}/{profile}/{label} 这样就可以返回configserver上的配置文件信息了。(默认的label时master分支)
    label表示git的分支名称。

  • config server服务器从git中获取到配置信息之后,会存储一份在Config-server的文件系统中,实质上config-server时通过git clone命令将配置内容复制了一份在本地存储,然后读取这些内容并返回给微服务应用进行加载。

  • config-server通过git在本地仓库暂存,可以有效的防止当git仓库出现故障而引起无法加载配置信息的情况,当我断开网络,继续访问刚才上面的网址,可以出现报错信息:Could not pull remote for label,但是它依然会为该请求返回配置内容。

服务器端配置:
1、需要开启@EnableConfigServer注解。表示开启Spring Cloud Config的服务端功能。(这里指明了所要连接的git仓库位置以及账户和密码等信息)

@EnableConfigServer
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class ManagePlatformApplication {}
2、 在application.properties中添加配置服务的基本信息:
spring.application.name=config-server
server.port = 7001
spring.cloud.config.server.git.uri=http://git.oschina.net/dis/SprinCloud-learning/ # 配置git仓库位置
spring.cloud.config.server.git.searchPaths=spring_cloud/config-repo # 配置仓库路径下的相对搜索位置
spring.cloud.config.server.git.username=username
spring.cloud.config.server.git.password=password

客户端配置映射:

#远程配置文件名称
spring.cloud.config.name=manage-platform
#配置文件使用的环境,比如开发dev,测试test,生产prod
spring.cloud.config.profile=dev
#版本:git分支,tag等(对应的label部分)
#spring.cloud.config.label=master
#配置中心地址(配置中心config-server的地址)
spring.cloud.config.uri=http://config.test.com:8899
#配置中心用户
spring.cloud.config.username=admin
#配置中心密码
spring.cloud.config.password=hfdhh)B7t

注意:这些属性必须配置在bootstrap.properties中,这样config-server中的配置信息才能被正确的加载。
spring boot对配置文件的在家顺序,对于本应用jar包之外的配置文件加载会优先于应用jar包内的配置内容,而通过bootstrap.properties对config-server的配置,使得该应用会从config-server中获取一些外部配置信息,这些信息的优先级比本地的内容要高。从而实现了外部化配置。

总结:
远程git仓库:用来存储配置文件的地方
ConfigServer:指明了所要连接的git仓库位置以及账户和密码等信息.
本地git仓库:在ConfigServer的文件系统中,每次客户端请求获取配置信息时,ConfigServer从Git仓库中获取最新配置到本地,然后在本地Git仓库中读取并返回,当远程仓库无法获取时,直接将本地内容返回。

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

Config Server巧妙的通过git clone将配置信息存于本地,起到了缓存的作用。

那么如果你的远程配置内容由某人通过修改后使用git push提交了,那么怎么实时更新呢,让客户端知道已经修改了配置文件!(动态刷新)
解:在build.gradle中增加spring-boot-starter-actuator监控模块。其中包括了/refresh端点的实现。该端点将用于实现客户端应用配置信息的重新获取与刷新。
然后重启启动客户端,为了加载actuator内容。修改远程配置文件内容,以测试是否有效。这时访问获取远程配置文件url发现内容没有变化。但通过post请求发送:http://localhost:7002/refresh,可以发现配置内容被更新了。

但是这样不太好,随着系统发展壮大后,维护这样的刷新清单也有很大的负担,可以使用Spring Cloud Bus以消息总线的方式进配置更新的通知,并完成集群上的批量配置更新,或者使用RabbitMQ来完成。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值