消息总线,首先看下官网的描述
Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。这可以用于广播状态更改(例如配置更改)或其他管理指令。
本文介绍下使用消息总线来实现git仓库的配置文件变更之后,通知微服务的案例。
再使用本案例之前需要已经安装好 RabbitMQ , 具体安装步骤请自行百度。
本案例示例代码在 spring-cloud(二)分布式配置中心 基础上进行改造。
1.在 config-client 项目的pom文件中增加 bus 的依赖支持
(目前唯一的实现是使用AMQP代理作为传输,可以使用RabbitMQ或Kafka)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.在 application.yml 文件中增加 rabbitmq 配置
server:
port: 8886
spring:
application:
name: config-client
cloud:
config:
label: master
profile: dev
discovery:
enabled: true
service-id: config-server
rabbitmq:
host: 192.168.2.170
port: 5672
username: guest
password: guest
eureka:
client:
registerWithEureka: true
fetchRegistry: true
service-url:
defaultZone: http://localhost:8761/eureka/
3.在启动类上增加 @RefreshScope 注解
@SpringBootApplication
@RefreshScope
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
4.分别启动项目 tm-eureka-server , config-server , config-client(8886,8887)
5.浏览器访问
http://localhost:8887/say
http://localhost:8887/bus/refresh
在post-man中访问
http://localhost:8887/bus/refresh
6.在 application.yml 文件中增加 rabbitmq 配置
management:
security:
enabled: false
7.在post-man中访问
http://localhost:8887/bus/refresh
8.将git中的tm.name值修改为 大清-皇太极
并再次执行步骤7,再次执行步骤5
可以发现我们在8887端口上执行的 /bus/refresh 之后,访问8887/say和8886/say 这两个服务的值都做了变更。证明消息总线已经生效了。
附文(可忽略)
参考文章:
https://hub.docker.com/r/library/rabbitmq/
(由于是学习spring-cloud此处推荐使用docker来完成安装,后续会讲解spring-cloud和docker集成,对docker不了解的可用参考之前写过的docker相关的文章)
docker run -d --name rabbitmq --publish 5671:5671 \
--publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 \
rabbitmq:management
联系客服