请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 380|回复: 1

Spring Cloud构建微服务架构分布式配置中心

[复制链接]
发表于 2018-7-6 17:06:14 | 显示全部楼层 |阅读模式
在本文中,我们将学习如何构建一个基于Git存储的分布式配置中心,并对客户端进行改造,并让其能够从配置中心获取配置信息并绑定到代码中的整个过程。
准备配置仓库
  • 准备一个git仓库,可以在码云或Github上创建都可以。
  • 假设我们读取配置中心的应用名为config-client,那么我们可以在git仓库中该项目的默认配置文件config-client.yml:

    1. info:
    2. profile: default
    复制代码

  • 为了演示加载不同环境的配置,我们可以在git仓库中再创建一个针对dev环境的配置文件config-client-dev.yml:
    1. info:
    2. profile: dev
    复制代码

通过Spring Cloud Config来构建一个分布式配置中心非常简单,只需要三步:构建配置中心
  • 创建一个基础的Spring Boot工程,命名为:config-server-git,并在pom.xml中引入下面的依赖(省略了parent和dependencyManagement部分):
    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.cloud</groupId>
    4. <artifactId>spring-cloud-config-server</artifactId>
    5. </dependency>
    6. </dependencies>
    复制代码

  • 创建Spring Boot的程序主类,并添加@EnableConfigServer注解,开启Spring Cloud Config的服务端功能。
    1. @EnableConfigServer
    2. @SpringBootApplication
    3. public class Application {
    4. public static void main(String[] args) {
    5. new SpringApplicationBuilder(Application.class).web(true).run(args);
    6. }
    7. }
    复制代码

  • 在application.yml中添加配置服务的基本信息以及Git仓库的相关信息,例如:
    1. spring
    2. application:
    3. name: config-server
    4. cloud:
    5. config:
    6. server:
    7. git:
    8. uri: http://git.oschina.net/didispace/config-repo-demo/
    9. server:
    10. port: 1201
    复制代码

  • 到这里,使用一个通过Spring Cloud Config实现,并使用Git管理配置内容的分布式配置中心就已经完成了。我们可以将该应用先启动起来,确保没有错误产生,然后再尝试下面的内容。
    如果我们的Git仓库需要权限访问,那么可以通过配置下面的两个属性来实现;
    spring.cloud.config.server.git.username:访问Git仓库的用户名
    spring.cloud.config.server.git.password:访问Git仓库的用户密码
    完成了这些准备工作之后,我们就可以通过浏览器、POSTMAN或CURL等工具直接来访问到我们的配置内容了。访问配置信息的URL与配置文件的映射关系如下:
    1. /{application}/{profile}[/{label}]
    2. /{application}-{profile}.yml
    3. /{label}/{application}-{profile}.yml
    4. /{application}-{profile}.properties
    5. /{label}/{application}-{profile}.properties
    复制代码

  • 上面的url会映射{application}-{profile}.properties对应的配置文件,其中{label}对应Git上不同的分支,默认为master。我们可以尝试构造不同的url来访问不同的配置内容,比如,要访问master分支,config-client应用的dev环境,就可以访问这个url:http://localhost:1201/config-client/dev/master,并获得如下返回:
    1. {
    2. "name": "config-client",
    3. "profiles": [
    4. "dev"
    5. ],
    6. "label": "master",
    7. "version": null,
    8. "state": null,
    9. "propertySources": [
    10. {
    11. "name": "http://git.oschina.net/didispace/config-repo-demo/config-client-dev.yml",
    12. "source": {
    13. "info.profile": "dev"
    14. }
    15. },
    16. {
    17. "name": "http://git.oschina.net/didispace/config-repo-demo/config-client.yml",
    18. "source": {
    19. "info.profile": "default"
    20. }
    21. }
    22. ]
    23. }
    复制代码

  • 我们可以看到该Json中返回了应用名:config-client,环境名:dev,分支名:master,以及default环境和dev环境的配置内容。
    构建客户端
    在完成了上述验证之后,确定配置服务中心已经正常运作,下面我们尝试如何在微服务应用中获取上述的配置信息。

    • 创建一个Spring Boot应用,命名为config-client,并在pom.xml中引入下述依赖:
      1. <dependencies>
      2. <dependency>
      3. <groupId>org.springframework.boot</groupId>
      4. <artifactId>spring-boot-starter-web</artifactId>
      5. </dependency>
      6. <dependency>
      7. <groupId>org.springframework.cloud</groupId>
      8. <artifactId>spring-cloud-starter-config</artifactId>
      9. </dependency>
      10. </dependencies>
      复制代码

    • 创建Spring Boot的应用主类,具体如下:

      1. @SpringBootApplication
      2. public class Application {
      3. public static void main(String[] args) {
      4. new SpringApplicationBuilder(Application.class).web(true).run(args);
      5. }
      6. }
      复制代码

      • 创建bootstrap.yml配置,来指定获取配置文件的config-server-git位置,例如:
      1. spring:
      2. application:
      3. name: config-client
      4. cloud:
      5. config:
      6. uri: http://localhost:1201/
      7. profile: default
      8. label: master
      9. server:
      10. port: 2001
      复制代码

      上述配置参数与Git中存储的配置文件中各个部分的对应关系如下:
      • spring.application.name:对应配置文件规则中的{application}部分
      • spring.cloud.config.profile:对应配置文件规则中的{profile}部分
      • spring.cloud.config.label:对应配置文件规则中的{label}部分
      • spring.cloud.config.uri:配置中心config-server的地址
      这里需要格外注意:上面这些属性必须配置在bootstrap.properties中,这样config-server中的配置信息才能被正确加载。
      在完成了上面你的代码编写之后,读者可以将config-server-git、config-client都启动起来


 楼主| 发表于 2018-7-6 17:07:22 | 显示全部楼层
喜欢文章的朋友可以持续关注内容更新~~
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

微信群请扫二维码
QQ交流1群:
545923995
(未满)

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2020-3-29 07:09 , Processed in 0.249393 second(s), 7 queries , File On.

快速回复 返回顶部 返回列表