博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置
阅读量:6540 次
发布时间:2019-06-24

本文共 5496 字,大约阅读时间需要 18 分钟。

一、为什么要统一管理微服务配置

对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护。

微服务的配置管理一般有以下需求:
1.集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理是很重要的。
2.不同环境不同配置,比如数据源配置在不同环境(开发,生产,测试)中是不同的。
3.运行期间可动态调整。
4.配置修改后可自动更新。
好在Spring Cloud Config已经全部实现了上面几点。

二、Spring Cloud Config简介和使用

2.1原理

Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Client 和 Config Server两个部分。原理是所有的配置信息都存储在Config Server,所有的微服务都指向Config Server,

各个微服务启动时都会请求Config Server来获取配置信息,然后缓存到本地以提高性能。

 

<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36" version="8.5.3" editor="www.draw.io"><diagram>5ZpLk6IwEIB/Ta6WEJ5HcXD2MlVT62F3j1mIkBokVoij7q/fBAICwVrLxdEZvRg6T75+0I0COF/vnxnapC80xhkwp/EewCdgmoZlOOJLSg6VxDO9SpAwEqtBR8GS/MFKOFXSLYlx0RnIKc042XSFEc1zHPGODDFGd91hK5p1d92gBGuCZYQyXfqDxDyt78I9yr9hkqT1zobjVz2/UfSWMLrN1X7AhKvyU3WvUb2WutEiRTHdtUQwBHDOKOVVa72f40yyrbFV8xYneptzM5zzcyaY1YR3lG1xfeLyXPxQsyjvBsvxBoDBLiUcLzcokr07oX0hS/k6U90rkmVzmlFWzoWL8iPkahvMON6fPKrRABCGhekac3YQQ9QEWyFTJuWry91RPwZUsrSlG0/JkDKJpFn4iEU0FJlhSlCjNKf5iiRCNs+IPP+Y0CD0/bGgOXYHWkOoTW06QA2OQM36PLbV+OMNjMv+PJigfztMzgAmJxMbBMUG5aKdyLbml9UQsXh71N26qwlv6K/uIxC2pjck7GmEX0jEaIHZOxEozOlM4ybulHfhFJzRN1zjyWmOe8SUCGUkycVlJMhgIQ8kNyJynJnqWJM4ltsMauOor+k44N1u6GgYt7j7A9jNEbD7/8Kum+uXwa5FlA/kXmfzp8HPvy54LdB8JHhDA9+E7aWAL/CMGZ8dJzBHewIa3TgBnYH4bA9wc8fgdkY5hPN4JitMaWkZKgoSddngPeE/pRlNLNtS179k32QqUr3q+hUzIg4nrbQ0N8GGHapJdn35q2OKONYK1h5RcUi6ZZEapc7NEUswbxuFDr4FdohrLWM4Q5y8d08xBFvt8EqJzA5OVG9WPyWsDq8mtQvW3jqNG9UL9Z/L1S1rC5Wqb+76PGvQy77/sAa7bQsX69W+Ix3a0wt12NQDfR+/gg7PKEIv1+H4fmvdm986PXe7VOdGP67b19P5QEUdesALQeCC0AbeAvgOCH3gifYTCF0QPIFZqNnFl0lFDGhOuslI89ahZUT1q6Kxix5joHJ/aHWYtqYOS09yrqaOgTL/odUBbfeW6tDfCTwTGTe/4w3VoBcp2shmjDgqOGWnIH1Qrm71EgLLmuhxZajIGeOFoKGX9Xf9aK8Lu86z3bvls72Xz7nGSDm5c718robYiV4WCAIRwKTfhA7wRNtvRTIbzBYgKCXBDPjWI8U2odRebLNc3UMN40rBzdTfQ9y1i9bvTdou2vpZ9gYuano99fXVcn7N1V3IHs1HxeXx9+pq+PFPATD8Cw==</diagram></mxfile>

 

2.2编写Config Server

1.在Git仓库(可以使用自己的仓库)新建几个配置文件,例如:

enter description here
内容分别为:
profile=dev-1.0
profile=production-1.0
profile=test-1.0
profile=default-1.0
2.新建一个SpringBoot项目microservice-config-server,并添加以下依赖

org.springframework.cloud
spring-cloud-config-server

3.在启动类添加 @EnableConfigServer注解

4.编写application.yml文件

server:  port: 8080spring:  application:    name: microservice-config-server  cloud:    config:      server:        git:          # 配置Git仓库的地址          uri: https://github.com/2YSP/spring-cloud-config-repo.git          # 配置Git仓库的用户名          username: 2YSP          # 配置Git仓库的密码          password: XX

这样就完成了,可以使用端点来获取配置文件,端点与配置文件的映射规则如下:

/{application}/{profile}[/{lable}]
/{application}-{profile}.yml
/{lable}/{application}-{profile}.yml
/{application}-{profile}.properties
/{lable}/{application}-{profile}.properties
{application}表示微服务的名称,{profile}代表环境,{lable}表示Git仓库的分支,默认是master。
本例如果要访问microservice-foo-dev.properties,则可以访问这些URL:

2.3编写Config Client

1.创建一个SpringBoot工程,ArtifactId为microservice-config-client,并添加以下依赖

org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-config

2.编写配置文件application.yml

server:  port: 8081

3.创建配置文件bootstrap.yml,并添加以下内容。

spring:  application:    # 对应Config Server所获取的配置文件的{application}    name: microservice-foo  cloud:    config:      uri: http://localhost:8080/      #对应config server所获取配置文件的{profile}      profile: dev      # 指定Git仓库的分支,对应config server所获取配置文件的{label}      label: master

需要注意的是,以上属性应配置在bootstrap.yml而不是application.yml文件中,否则部分配置就不能正常工作。

4.编写Controller

@RestControllerpublic class ConfigClientController {    @Value("${profile}")    private String profile;    @GetMapping("/profile")    public String hello(){        return this.profile;    }}

这里通过注解 @Value("${profile}") 来绑定Git仓库的profile属性。

5.测试
先启动microservice-config-server,再启动microservice-config-client,访问即可获得以下结果。
dev-1.0
说明能够正常的获取Git仓库的配置信息。

三、配置文件的手动刷新和自动刷新

3.1通过/refresh端点手动刷新

1.复制项目microservice-config-client更改为microservice-config-client-refresh

2.为项目添加spring-boot-starter-actuator依赖,如果有了就不添加了。
3.在Controller类上添加@RefreshScope注解

@RestController@RefreshScopepublic class ConfigClientController {    @Value("${profile}")    private String profile;    @GetMapping("/profile")    public String hello(){        return this.profile;    }}

4.修改Git仓库中microservice-foo-dev.properties文件的内容,然后先发送POST请求到http://localhost:8081/refresh,再访问http://localhost:8081/refresh即可获取最新的配置。

3.2使用Spring Cloud Bus 实现自动刷新配置

1.首先安装RabbitMQ,安装步骤这里不介绍我的博客里有。

2.为项目添加以下依赖

org.springframework.cloud
spring-cloud-starter-bus-amqp

3.在bootstrap.yml中添加以下内容

spring:  application:    # 对应Config Server所获取的配置文件的{application}    name: microservice-foo  cloud:    config:      uri: http://localhost:8080/      #对应config server所获取配置文件的{profile}      profile: dev      # 指定Git仓库的分支,对应config server所获取配置文件的{label}      label: master  rabbitmq:    host: localhost    port: 5672 #默认端口 5672    username: guest    password: guest

四、Config Server的高可用

转载于:https://www.cnblogs.com/2YSP/p/9414024.html

你可能感兴趣的文章
Bzoj1758: [Wc2010]重建计划
查看>>
redis集群部署及踩过的坑
查看>>
j2EE监听器-listener
查看>>
使用pip命令报You are using pip version 9.0.3, however version 18.0 is available pip版本过期.解决方案...
查看>>
(转)LINQ之路
查看>>
Django REST框架--关系和超链接api
查看>>
双击防止网页放大缩小HTML5
查看>>
C#的一些学习方法
查看>>
iOS开发-开发总结
查看>>
U3D Invoke() IsInvoking CancelInvoke方法的调用
查看>>
Javascript 如何生成Less和Js的Source map
查看>>
中间有文字的分割线效果
查看>>
<悟道一位IT高管20年的职场心经>笔记
查看>>
volatile和synchronized的区别
查看>>
10.30T2 二分+前缀和(后缀和)
查看>>
vuex视频教程
查看>>
Java 线程 — ThreadLocal
查看>>
安居客爬虫(selenium实现)
查看>>
-----二叉树的遍历-------
查看>>
ACM北大暑期课培训第一天
查看>>