SpringCloud之消息总线Bus(七)

902 阅读2分钟

Spring Cloud Bus

Spring Cloud Bus是什么

Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。这可以用于广播状态更改(例如配置更改)或其他管理指令。一个关键的想法是,Bus就像一个扩展的Spring Boot应用程序的分布式执行器,但也可以用作应用程序之间的通信渠道。当前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(还有一些取决于传输)在其他传输的路线图上。

这句话摘自官网翻译,简单来说就是我们经常使用它来处理config统一管理的配置文件修改后,可以通过springcloud bus进行刷新,而不用重启原来的项目。大致结构图如下:

springcloud_bus_jiegoutu.png
springcloud_bus_jiegoutu.png

当然它通知刷新不是仅仅通知这个集群里的服务,而是整个微服务,这里只是简化了些。

简单使用

  • 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    usernameguest
6    passwordguest
  • 修改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}

测试:

config_bus_refresh1
config_bus_refresh1

现在修改git上的配置文件,这里将uname改下,并执行/actuator/refresh,并且必须为post请求:

config_bus_refresh2
config_bus_refresh2

完成后重新访问,然后查看控制台输出的值是否成功改变。注意在类上添加@RefreshScope这个注解。

config_bus_refresh3
config_bus_refresh3