Bus是一个消息总线,config-server和其他服务都通过Bus监听一个消息队列(本例用Kafka), 通过它可以实现配置中心变动后,所有服务实例都及时刷新配置。
本例是在spring cloud config的基础上来的。
Config Server 配置
引入maven:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
修改bootstrap.yml
spring:
application:
name: CONFIG-SERVER
# 配置一个数据源
datasource:
url: jdbc:mysql://ubuntu:3306/spring?characterEncoding=utf-8&useSSL=true
username: root
password: root
profiles:
# 此处必须指定配置仓库的类型, 可以选git snv等, 也可以写多个. 这里用的是数据库.
active: jdbc
cloud:
config:
server:
jdbc:
# 重写查询Sql, 原SQL中KEY是关键字需要加反引号
sql: 'SELECT `KEY`, VALUE from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?'
# Bus使用Stream来连接Kafka,会同时访问zookeeper和kafka。
stream:
kafka:
binder:
zkNodes:
192.168.40.128
brokers:
192.168.40.128
# Bus的相关配置。
bus:
trace:
enabled: true
management:
security:
enabled: false
主类上添加 @EnableKafka
Client配置
客户端服务引入maven和配置文件,跟Server相同。
唯一的区别是Client不需要加主类注解。
配置及时刷新
完成上面的配置之后,配置中心和下游服务就通过kafka连接了,所有的服务都会监听Kafka的一个Topic(SpringBus,名字可配置),此时修改配置数据表,然后访问任意服务的 /bus/refresh 端点即可实现所有服务刷新配置。
image.png
网友评论