springcloud实战之Config(4)

回顾

springcloud实战之Config(2) ,我们简单的实现了动态刷新。但如果有大量的微服务,就需要为每个 client 去 refresh,明显是不合理的。而 Spring Cloud Bus 可以完美解决这一问题。

通过消息总线 Spring Cloud Bus 更新客户端配置文件(使用 Kafka)

原理

核心

Spring bus 的一个核心思想是通过分布式的启动器对 spring boot 应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用 AMQP 消息代理作为通道,同样特性的设置(有些取决于通道的设置)在更多通道的文档中。其实本质是利用了 MQ 的广播机制在分布式的系统中传播消息,目前常用的有 Kafka 和 RabbitMQ。

架构图

springcloud实战之Config(4)_2019-12-04-16-28-26.png

流程

  • 提交代码触发 post 请求给 bus/refresh
  • server 端接收到请求并发送给 Spring Cloud Bus
  • Spring Cloud bus 接到消息并通知给其它客户端
  • 其它客户端接收到通知,请求 Server 端获取最新配置
  • 全部客户端均获取到最新的配置

安装 kafka

详见

server 模块整合

依赖
1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
server:
port: 8769
#避免配置中心向自己发布服务导致程序报错服务启动不了。
#如果不加项目启动时报错:Cannot execute request on any known server
eureka:
client:
service-url:
defaultZone: http://localhost:9999/eureka
spring:
application:
name: spring-cloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/qn101630/qn101630.github.io.git # 配置git仓库的地址
search-paths: config-repo # git仓库地址下的相对地址,可以配置多个,用,分割。
username: qn101630 # git仓库的账号
password: qn192837QN
default-label: code
# bus消息总线
stream:
kafka:
binder:
brokers: localhost:9092
bus:
trace:
enabled: true
# skip-ssl-validation: true
# 暴露服务端端口 以便客户端刷新
management:
endpoints:
web:
exposure:
include: "*"

client 整合

与 server 整合一致,添加同样的配置与依赖

测试

  • 运行 Eureka、server、client(8771)、client(8772);直接访问http://localhost:8771/testConfig,返回配置信息
  • 修改配置项,push 到 Git,这时候我们需要在 server 端 post

    curl -X POST http://localhost:8769/actuator/bus-refresh

  • 再次访问http://localhost:8771/testConfig,返回修改后的配置

参考资料

通过消息总线 Spring Cloud Bus 实现配置文件刷新

文章目录
  1. 1. 回顾
  2. 2. 通过消息总线 Spring Cloud Bus 更新客户端配置文件(使用 Kafka)
    1. 2.1. 原理
      1. 2.1.0.1. 核心
      2. 2.1.0.2. 架构图
      3. 2.1.0.3. 流程
  3. 2.2. 安装 kafka
    1. 2.2.0.1. server 模块整合
      1. 2.2.0.1.1. 依赖
      2. 2.2.0.1.2. 配置
    2. 2.2.0.2. client 整合
  • 3. 测试
  • 4. 参考资料
  • |