一、什么是spring cloud
官网的说法:Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment
和PropertySource
抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用。随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。可以轻松添加替代实现,并使用Spring配置将其插入
自己总结一句话:将分布式各个系统的配置文件(生产、测试)集中管理,统一配置,最终实现动态刷新
二、spring cloud config bus 实现架构图
流程介绍:
整个架构图主要有四部分组成:git(webhook,config-repo),config-server,客户端(clientABC),线程总线(spring cloud bus)
1、webhook:git的钩子功能,当git代码又变更时可post调用你配置的webhook地址,详情可百度
2、configServer:是我们本地写的配置中心服务,webhook配置的通知地址就是这个服务的,如:http://localhost:8888/bus/refresh 注意/bus/refresh这个访问节点只有配置了mq(线程总线)之后才会有
3、config-repo:这个是我们在git上新建的项目,里边主要集中存放我们的配置文件
4、clientABC:是我们的微服务系统
5、spring cloud bus:就是我们说的线程总线,主要是git有变更时config-server发送消息给各个客户端,客户端做下一步操作
概要流程
1、将各个微服务系统(ClientABC)里边的配置文件提取到git上的config-repo项目里结构如图,建议用yml文件
2、新建config-server项目,具体代码后面给出,webhook配置通知地址
3、当config-repo配置文件代码改动时出发webhook里配置的地址(config-server),confg-server收到通知后发送消息到消息总线,各个客户端订阅消息,各个客户端按需要通过configserver拉取git上改动点到本地,实现自动刷新
三、具体实现
1、config-server引用pom
(1)
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.cloud
spring-cloud-config-server
org.springframework.cloud
spring-cloud-starter-bus-amqp
(2)、application启动主类加注解
@EnableDiscoveryClient//支持eureka
@EnableConfigServer//支持config
(3)、新增bootstrap.yml文件
server:
port: 8888
spring:
application:
name: spring-cloud-config-server
cloud:
config:
server:
git:
# 配置git仓库的地址
uri:
# git仓库地址下的相对地址,可以配置多个,用,分割。
search-paths: config
username: #用户名
password: #密码
rabbitmq:
host: #mq配置
port: 5672
username: admin
password: admin
eureka:
instance:
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port}
hostname: ${spring.cloud.client.ipAddress}
prefer-ip-address: true
client:
serviceUrl:
defaultZone: http://localhost:9999/eureka/
encrypt:
key: key#自定义,密码加密用可删除
到此为止config-server可以启动了(前提:mq启动、eureka启动)
2、clientABC修改点:
(1)、新增pom
org.springframework.cloud
spring-cloud-config-server
org.springframework.cloud
spring-cloud-starter-bus-amqp
(2)、删除之前的配置文件并新增bootstarp.yml文件,并在config-repo对应的配置文件里加入mq配置
spring:
cloud:
config:
profile: dev #多环境配置
name: config #config-repo对应的文件名前缀如config-dev.yml
label: master #git分支名
uri: http://localhost:8888/ #config-server地址
到此为止客户端配置完毕,启动后看看日志有没有把git上的配置文件下载到本地
3、检验
尝试修改git上的配置文件,此时注意你的日志,当然如果你在内网git无法回调你的config-server那么你可以自己调用,post请求http://localhost:8888/bus/refresh看看有什么变化
也可以直接@Value("配置文件属性")看看拿到的值对不对,改没改
spring-cloud-config中文文档
公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢