使用SpringCloud实现Java分布式开发【part-7】:Spring Cloud Bus消息总线的介绍及使用
SpringCloud简介Spring Cloud是Spring旗下的项目之一Spring Cloud并不是一个组件 而是许多组件的集合其将当下非常流行的一些技术整合到了一起 实现了多个分布式开发中的重要功能协调了分布式环境中各个系统 并且为各类服务提供模板性的配置其主要涉及的组件包括:Eureka:注册中心Zuul或Spring Cloud Gateway:服务网关Ribbon:负载均衡Feig
SpringCloud简介
Spring Cloud是Spring旗下的项目之一
Spring Cloud并不是一个组件 而是许多组件的集合
其将当下非常流行的一些技术整合到了一起 实现了多个分布式开发中的重要功能
协调了分布式环境中各个系统 并且为各类服务提供模板性的配置
其主要涉及的组件包括:
- Eureka:注册中心
- Zuul或Spring Cloud Gateway:服务网关
- Ribbon:负载均衡
- Feign:服务调用
- Hystrix或Resilience4j:熔断器
除此之外 还有一些很有用的组件 比如Spring Cloud Config和Spring Cloud Bus
【在本篇中 将介绍Spring Cloud Bus消息总线】
Spring Cloud Bus消息总线
若修改Spring Cloud Config的配置 不重启服务的话 则无法读取到最新修改后的配置项
Spring Cloud Bus可以在不重启系统的情况下实现及时同步更新配置项
Spring Cloud Bus是用轻量的消息代理将分布式的节点连接起来 可以用于广播配置文件的更改或者服务的监控管理
也就是消息总线可以为微服务做监控 也可以实现应用程序之间的相互通信
Spring Cloud Bus可选的消息代理有RabbitMQ和Kafka
使用步骤
Spring Cloud Bus底层是基于RabbitMQ实现的 默认使用本地的消息队列服务 因此需要提前安装RabbitMQ 然后启动本地的RabbitMQ服务
安装教程请参看我的另一篇博客:手把手演示Windows环境下安装RabbitMQ
1、首先在[配置中心工程]进行配置:
在配置中心工程的pom文件中添加相关的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
然后进行相关配置:
spring:
application:
name: config-server
cloud:
config:
server:
# 指定git仓库的地址
git:
uri: https://gitee.com/zhangsan/spring-cloud-config.git
username: zhangsan
password: 123456789
# RabbitMQ配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
management:
endpoints:
web:
exposure:
# 暴露触发消息总线的地址
# 访问该地址即可立即刷新配置文件
include: bus-refresh
2、[服务提供工程]也需要进行相应配置
(服务提供工程 也就是将配置文件托管到git的工程)
同样 需要添加相关的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置文件也要进行修改:
spring:
cloud:
config:
name: user
profile: dev
label: master
discovery:
enabled: true
service-id: config-server
# RabbitMQ配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
在控制器类上添加@RefreshScope
注解以使当有最新的配置项时 刷新配置:
@RestController
@RequestMapping("/user")
// 当有最新的配置项时 刷新配置
@RefreshScope
public class UserController {
@Autowired
private UserService userService;
@Value("${test.name}")
private String name;
@GetMapping("/{id}")
public User queryById(@PathVariable Long id)
{
System.out.println("name : "+name);
return userService.queryById(id);
}
}
测试:
当修改了git上的配置文件之后 发送一个Post请求给localhost:12000/actuator/bus-refresh
(12000端口为我的配置中心项目的端口 bus-refresh为设置的路径名称 可以在配置文件中修改)
此时 在项目中显示的是配置文件中最新的数据了
测试成功
更多推荐
所有评论(0)