Spring Cloud 统一配置

    xiaoxiao2021-03-25  120

    本文使用 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> 12345 12345

    然后在需要自动更新配置变量的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 进行集中化配置管理。而且这个目前也比较成熟,很多商用项目已经在使用。

    目前 Spring Cloud 还并不成熟,所以大家慢慢学习和研究,博主也期待 Spring Cloud 真正强大的一天早一天到来。

    转载请注明原文地址: https://ju.6miu.com/read-14379.html

    最新回复(0)