消息总线,首先看下官网的描述
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:8886/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 这两个服务的值都做了变更。证明消息总线已经生效了。
附文(可忽略)
参考文章:
http://cloud./spring-cloud-static/Dalston.SR5/single/spring-cloud.html#_push_notifications_and_spring_cloud_bus
https://hub./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
|