美文网首页
Spring-Cloud-Config快速开始

Spring-Cloud-Config快速开始

作者: 小牛学堂 | 来源:发表于2018-10-16 10:05 被阅读0次

    Spring-Cloud-Config简介

    Spring-Cloud-Config是Sping-Cloud下用于分布式配置管理的组件,分成了两个角色Config-Server和Config-Client;Config-Server端集中式存储/管理配置文件,并对外提供接口方便Config-Client访问,接口使用HTTP的方式对外提供访问;Config-Client通过接口获取配置文件,然后可以在应用中使用;Config-Server存储/管理的配置文件可以来自本地文件,远程Git仓库以及远程Svn仓库;

    Config-Server端

    1.Config-Server依赖

    注:2.0以后的版本需要jdk1.8及以上版本

    2.准备被管理的配置文件

    Spring-Cloud-Config提供了对多种环境配置文件的支持,比如:开发环境,测试环境,生产环境等;为了更加全面的模拟,准备三个配置分别如下:

    分别是开发,测试以及生产的配置文件,内容也比较简单如下所示:

    3.准备启动配置文件

    被管理的配置文件可以来自多个地方,包括:本地文件,远程Git仓库以及远程Svn仓库,下面分别在resources/application.properties中做配置;

    3.1本地文件

    指定了server端启动端口为8888,文件来自E:/github/spring-cloud-config-repo,以上三个文件放在此目录下

    3.2远程Git仓库

    spring.profiles.active默认值是git,git.uri指定地址,git仓库default-label默认值是master;

    3.3远程svn仓库

    配置了svn的用户名和密码,svn仓库default-label默认值是trunk,因为此处自建的svn服务器default-label为空,所以设置为空值即可;

    4.准备启动类

    @EnableConfigServer启动配置服务器;

    5.测试

    不管使用以上的哪种方式配置,都可以通过使用http的方式访问,http可以有以下几种方式请求资源:

    application本实例中对应config;profile表示使用哪种环境的配置文件,这里可以是dev,test,pro;label可选的标签,git仓库默认值master,svn仓库默认值是trunk;

    5.1请求http://localhost:8888/config/dev/master,结果如下:

    返回结果包含了详细的信息,最后的source里面是配置文件内容;

    5.2请求http://localhost:8888/config-dev.yml,结果如下:

    此种方式访问仅显示配置文件内容,同样properties后缀的也仅显示配置文件内容,只是显示的格式不一样;

    5.3更新git上文件内容,请求http://localhost:8888/config-dev.yml,结果如下:

    获取到了最新的内容,其实每次在请求的时候都会去远程仓库中更新一下数据,日志如下:

    把数据更新到本地的Temp路径下;

    Config-Client端

    1.Config-Client依赖

    2.启动配置文件

    在配置文件resources/bootstrap.properties中做如下配置:

    spring.application.name:对应{application},本实例中是config;

    spring.cloud.config.label:对应{label},指定server端配置的分支,此处填master即可;

    spring.cloud.config.profile:对应{profile},指定client当前的环境,可选值:dev,test,pro;

    spring.cloud.config.uri:server端地址;

    server.port:client启动端口;

    3.准备测试类

    访问地址:http://localhost:8889/hello,返回结果如下:

    关于Spring-Cloud-Config配置的更新

    1.Client端初始化配置文件

    Client端在启动的时候,可以发现Server端有拉取配置文件的日志:

    2.Server端数据更新,Client如何更新

    更新git中config-test.properties,请求http://localhost:8888/config-test.yml,结果如下:

    Client请求http://localhost:8889/hello,结果如下:

    可以发现Server端已经更新,但是Client端没有获取到最新的数据,还是使用的缓存的老数据;

    Spring-Cloud-Config提供了多种刷新机制,下面看一下最简单手动刷新:

    2.1引入依赖

    2.2暴露全部endpoints

    在bootstrap.properties中添加

    2.3.修改HelloController

    @RefreshScope在手动执行刷新的时候会更新此变量

    2.4.启动

    观察启动日志,其中有一条映射如下:

    /actuator/refresh提供了手动刷新的功能,并且必须使用POST方式;

    2.5.测试

    访问地址:http://localhost:8889/hello,返回结果如下:

    更新git上的配置文件,配置值为foo=hello test update;

    访问地址:http://localhost:8889/hello,返回结果如下:

    执行手动刷新操作:

    访问地址:http://localhost:8889/hello,返回结果如下:

    3.如何自动更新

    在生产环境下不可能每次都去手动触发refresh,github提供了webhook功能,当某个事件发生时,通过发送http的方式告诉接收方,这样就可以在接收到事件的时候触发refresh请求;

    几个待分析问题

    1.多个Client节点如何更新

    正常情况下Client会有很多个节点,而且节点会出现上线和下线,如何同时通知每个节点,Spring-Cloud-Config提供了Spring Cloud Bus来批量处理;

    2.更新机制

    在执行refresh的时候,只会把变动的参数发送给Client端,没有变动的不会发送,节约了流量;但是如果配置文件被多个不同的Client使用,是否会出现不相干的参数会发送给每个Client;

    3.多配置文件的支持

    Server可以同时加载多个配置文件,Client也可以支持多个配置文件;

    4.Server端如何保证数据的可靠性

    Server端集中管理配置,所以服务的可靠性很重要;

    相关文章

      网友评论

          本文标题:Spring-Cloud-Config快速开始

          本文链接:https://www.haomeiwen.com/subject/mguczftx.html