在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线。
SpringCloud中也有对应的解决方案,SpringCloud Bus 将分布式的节点用轻量的消息代理连接起来,可以很容易搭建消息总线,配合SpringCloud config 实现微服务应用配置信息的动态更新。
消息总线其实通过消息中间主题模式,他使用广播消息的机制被所有在注册中心微服务实例进行监听和消费。以广播形式将消息推送给所有注册中心服务列表
首先使用springcloud-bus我们需要安装rabbitmq,安装过程就不说了,就跟安装qq一样贼简单,安装好以后启动rabbitmq:
启动好过后访问网址:local host:15672.账号密码都是guest,登录成功就进入以下界面
新建服务端口号3366:
添加pom依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.zx.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
创建bootstrap.yml文件:
server:
port: 3366
spring:
application:
name: config-client
cloud:
config:
label: master
name: config
profile: dev
uri: http://localhost:3344
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka
management:
endpoints:
web:
exposure:
include: "*"
新建主启动类:
新建controller层:
因为是在3344,config的服务端通知3355和3366,所以需要在3344添加pom依赖继承rabbitmq
修改3344的yml文件:添加rabbitmq的配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
配置bus:
暴露bus刷新配置的端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
config客户端3355也需要添加pom依赖:
修改yml文件:添加mq的配置
3366也是一样的修改pom和yml文件
启动7001,3344,3355,3366访问:
修改版本号,3改成4
再访问3344:版本号为5
没有发送post请求之前:
访问3355:版本号还是3
访问3366:版本还是3
post刷新3344:开始的时候报错是因为多添加了web依赖,3344去掉web依赖就行了
以上图可以看出已经post成功了,再访问3355和3366
能看到已经修改成功了并且动态更新了,
再看rabbitmq:
能看到有springcloudbus
下面是定点通知:
再次修改版本号,从刚刚的5修改为6
只通知3355变更版本号
依次访问3344,3355,3366
能看到就只有3355改变了,3366没有改变