概述:
问题:
当多个团队同时开发一个项目时,每个团队的配置有可能不统一,会导致功能不兼容的情况,再比如一般情况下修改配置文件需要重启项目,这样很是浪费精力,再比如将一些配置的账号密码放在配置文件中,这样所有的开发者都会看到,安全性得不到更好保障,为了解决以上等问题,统一配置中心出现了,它是cloud中的一个组件,我们可以通过这个组建对不同的服务进行不同的配置,这个组建存放于一些远程仓库比如svn,git等统一管理配置,快速切换各个环境的配置
使用:
服务端:
- 主函数添加@EnableEureka和@EnableConfigServer注解,需要注册到注册中心
- 配置文件中配置:
#注册中心
eureka.client.service-url.defaultZone=http://ip:port/eureka/
#svn
management.security.enabled=false
spring.cloud.config.server.svn.uri=svn://ip/codes/background
spring.cloud.config.server.svn.username=用户名
spring.cloud.config.server.svn.password=密码
spring.cloud.config.server.svn.default-label=config
#需要显示声明subversion,使用svn
spring.profiles.active=subversion
客户端:
- 配置文件:
#从远程获取配置文件
spring.cloud.config.discovery.enabled=true
#订阅的服务名称
spring.cloud.config.discovery.service-id=config-server
#使用消息总线时
management.security.enabled=false
#仓库分支配置文件名称
spring.cloud.config.name=schoolfront-client
#文件夹
spring.cloud.config.label=dev
#dev开发环境配置文件
#test测试环境
#pro正式环境
spring.cloud.config.profile=dev
这样就可以使用统一配置中心了
出现问题(spring cloud bus消息总线):
当使用统一注册中心时,在服务端修改完成配置之后,需要在client端重启才能更新配置,这里我们使用rabbitMQ消息队列来实现实时更新,而Bus就是用来操作消息组件的。
使用:
服务端只需要导包就可以:
- 导包
客户端: - 导包
- controller层添加@RefreshScope刷新配置
简单说明:
- 在 config-server中引用bus,将服务端加入到消息总线中
- 当配置中心的文件发生改变时,pc端会发送一个/bus/refresh的post请求到configserver,然后,configserver会将刷新的消息请求发送到消息总线中,然后这个消息会被具体的实例读取到,会重新从configserver获取配置消息,实现动态刷新,
- /bus/refresh可以指定刷新的具体服务,使用:destination,/bus/refresh?destination=abcd