Spring Cloud Bus
Spring Cloud Bus是什么
Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。这可以用于广播状态更改(例如配置更改)或其他管理指令。一个关键的想法是,Bus就像一个扩展的Spring Boot应用程序的分布式执行器,但也可以用作应用程序之间的通信渠道。当前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(还有一些取决于传输)在其他传输的路线图上。
这句话摘自官网翻译,简单来说就是我们经常使用它来处理config统一管理的配置文件修改后,可以通过springcloud bus进行刷新,而不用重启原来的项目。大致结构图如下:
当然它通知刷新不是仅仅通知这个集群里的服务,而是整个微服务,这里只是简化了些。
简单使用
- pom添加bus依赖
1 <!--springcloud bus -->
2 <dependency>
3 <groupId>org.springframework.cloud</groupId>
4 <artifactId>spring-cloud-starter-bus-amqp</artifactId>
5 </dependency>
- yml文件
1 spring:
2 rabbitmq:
3 host: 127.0.0.1
4 port: 5672
5 username: guest
6 password: guest
- 修改config客户端配置(web中yml配置)
1management:
2 endpoints:
3 web:
4 exposure:
5 include: '*'
- 使用@RemoteApplicationEventScan开启bus
1package com.lytw13.demo;
2
3import org.springframework.boot.SpringApplication;
4import org.springframework.cloud.bus.jackson.RemoteApplicationEventScan;
5import org.springframework.cloud.client.SpringCloudApplication;
6import org.springframework.cloud.config.server.EnableConfigServer;
7
8@SpringCloudApplication
9@EnableConfigServer //开启configserver
10@RemoteApplicationEventScan //开启bus扫描
11public class ConfigApplication {
12 public static void main(String[] args) {
13 SpringApplication.run(ConfigApplication.class,args);
14 }
15}
测试:
现在修改git上的配置文件,这里将uname改下,并执行/actuator/refresh,并且必须为post请求:
完成后重新访问,然后查看控制台输出的值是否成功改变。注意在类上添加@RefreshScope这个注解。