spring Cloud 配置中心详解

本文使用 spring Cloud 进行集中式配置管理,将以往的配置文件从项目中摘除后放到Git 或svn中集中管理,并在需要变更的时候,可以通知到各应用程序,应用程序刷新配置不需要重启。

先套用下面这张图来看一下我们需要做的事情: 

这里写图片描述

git Repository 为存放配置的地方,当然你也可以选择SVN。 

本文的Git 地址为:https://github.com/xzxiaoshan/config-repo

接着我们创建多模块Maven工程,包括 sample-cloud-all 、 sample-cloud-configserver 、 sample-cloud-client ,整体结构如下图: 

这里写图片描述

其中config-repo 为配置文件存放位置,并非一个Maven工程,只是为了便于本地修改和提交。 

整体源码地址在Github上,所以本文就不贴代码了 

地址:https://github.com/xzxiaoshan/spring-cloud

至此,config-server 和 config-client 已经完成了,并且可以正常使用了。

再说一下基本原理: 

git 上存放我们的远程配置文件 

config-server 连接到 git 

config-client 连接到config-server 

当我们启动config-client 服务的时候,client 会通过连接的 config-server 拿到远程git 上面的配置文件,然后通过 Spring 加载到对象中。

那么,当我们修改了 git 上的远程配置文件后,如何在不重启 config-client 服务的情况下让项目中引用的配置信息更新呢? 

首先,我们在 config-client 工程中添加依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <optional>true</optional> </dependency>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

然后在需要自动更新配置变量的Java类上,使用注解 @RefreshScope 修饰。

以后当我们再更新git上面的配置文件后,在 config-client 端执行POST 请求 http://localhost:8080/refresh 就可以更新刷新配置变量到内存中了。

如果我们 config-client 做的是分布式部署,岂不是要每一个机器都POST一下 /refresh 请求,这样显然不是最好的方法。 

Spring Cloud Bus 为我们解决了这样的问题。

先看一下下面这张套用的图: 

这里写图片描述

图中的 Cloud Bus 作为依赖库存在于每个App 中,并不是独立的服务。

官网源码地址 https://github.com/spring-cloud/spring-cloud-bus

因为时间原因,对于 Spring Cloud Bus 请大家自行了解下。 

Cloud Bus 需要依赖AMQP、Redis、Kafka 这样的组件做为代理才可以使用。

经过对Spring Cloud 的统一配置管理的了解和测试,本人发现这个做的并不好,特别是在分布式部署上虽然完全可以支持,但是总感觉使用起来比较麻烦。

个人还是推荐大家使用百度开源的 Disconf 进行集中化配置管理。而且这个目前也比较成熟,很多商用项目已经在使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值