一 具体:Spring Cloud Config配置全局刷新
1 业务、需求
????????业务:spring cloud netflix + spring cloud config搭建的微服务
????????需求:spring cloud config配置的全局刷新
2 解决方案
????????架构:多个微服务模块
????????功能:全局刷新
????????工具:spring cloud bus就可以用来实现配置的自动刷新
3 高效学习
(1)思想
????????Spring Cloud Bus使用轻量级的消息代理/总线。
(2)流原
????????Spring Cloud Bus中可以使用例如RabbitMQ、Kafka等消息服务器,来把消息广播到各个微服务模块,以达到通知各个微服务spring cloud config配置变更的目的,最终实现spring cloud config全局的自动刷新。
? ? ? ? Spring Cloud Bus想象成一个分布式的Spring Boot Actuator。如果只用一个Spring Boot Actuator那么,只能手动对单台微服务模块进行spring cloud config配置的刷新。而使用Spring Cloud Bus,可以对所有的微服务模块进行spring cloud config配置的刷新。
- 第一步:用户,post请求 + spring cloud bus的bush/refresh,刷新spring cloud config服务。
- 第二步:spring cloud config发送配置变更消息 RabbitMq消息服务器
- 第三步:所有的微服务模块(1~4)都去监听并接收配置变更消息
- 第四步:所有的微服务模块,主动去spring cloud config获取最新的配置信息
- 第五步:spring cloud config会去远程的git仓库 或者 本地git仓库(如果缓存了的话)获取最新的配置信息返回给所有微服务模块。
(3)注,应用
服务端配置(spring cloud config项目):
- 第一步:加入依赖:spring-cloud-starter-bus-amqp、spring-boot-starter-actuator:
<!-- spring-cloud-starter-bus-amqp -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!-- spring-boot-starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
注:如果机器充足的话,不需要使用spring cloud config做为spring cloud bus服务,可以单独为spring cloud bus单独起一个微服务。如下图所示:
如果使用上图所示的架构,那么如果spring cloud config项目的配置更改后,可直接对单独的spring cloud bus微服务进行刷新,把配置更新消息推送到Rabbitmq消息服务器中......。 - 第二步:配置文件增加rabbitmq的配置、开户spring cloud bus、开启所有端点
#配置rabbitmq
spring.rabbitmq.host=192.168.10.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#开启spring cloud bus,默认是开启的,也可以省略该配置
spring.cloud.bus.enabled=true
#打开所有的web访问端点
management.endpoints.web.exposure.include=*
- ???????????客户端配置,(需求接收配置变更的所有的微服务模块):
- 第一步:加入依赖:spring-cloud-starter-bus-amqp、spring-boot-starter-actuator。
<!-- spring-cloud-starter-bus-amqp -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!-- spring-boot-starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 第二步:加入rabbitmq的配置信息。如果引用的是git中的配置,那记得是把rabbitmq的配置push到git远程仓库中。
#配置rabbitmq
spring.rabbitmq.host=192.168.10.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest - 第三步:然后post方式请求地址:http://localhost:8888/actuator/bus-refresh
- 第四步:如果返回成功1,则RabbitMQ将收到消息
- 第五步:需求接收配置变更的所有的微服务模块会消费消息,实现全局刷新
测试:
- 第一步:启动rabbitmq
- 第二步:启动spring cloud config微服务
- 第三步:启动需求接收配置变更的所有的微服务模块
- 第四步:查看rabbitmq控制台的消息变化
- 第五步:修改配置,提交到远程git仓库
- 第六步:然后post方式请求spring cloud config项目:http://localhost:8888/actuator/bus-refresh
- 第七步:通过访问需求接收配置变更的所有的微服务模块的controller去验证是否成功。
?
|