当前位置:网站首页>Bus消息总线
Bus消息总线
2022-07-07 02:40:00 【RB_VER】
概述
Spring Cloud Bus配合spring cloud config使用可以实现配置的动态刷新。
spring cloud bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架。
它整合了Java的事件处理机制和消息中间件的功能。
Bus支持两种消息代理:RabbitMQ和Kafka。
spring cloud bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改,事件推送等,也可以当作微服务间的通信通道。
总线:在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以被它称为消息总线。在总线上的各个实例,都可以方便的广播一些需要让其他连接在该主题上的实例都知道的消息。
基本原理:config client实例都监听MQ中同一个topic(默认是SpringCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到topic中,这样其他监听同一个topic的服务就能得到通知,然后去更新自身配置。
spring cloud bus动态刷新全局广播
设计思想:
利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的位置
利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置。
第二种架构更为合理,第一种不合理的原因:
- 打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担配置刷新的职责。
- 破坏了微服务各节点的对等性。
- 有一定局限性。
创建cloud-config-center-3344模块作为配置中心服务端。
具体配置参见【微服务】整合spring cloud config。
pom.xml
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
...
application.yml
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
uri: [email protected]:zzyybs/springcloud-config.git
search-paths:
- springcloud-config
label: master
rabbit:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
需要先配置rabbitmq。
新建cloud-config-client-3366模块。
pom.xml依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<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>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>
bootstrap.yml
server:
port: 3366
spring:
application:
name: config-client
cloud:
config:
label: master # 分支名称
name: config # 配置文件名称
profile: dev # 读取后缀名称 上述三个综合:master分支上config-dev.yml的配置文件
uri: http://localhost:3344 # 配置中心地址
rabbit:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defautZone: http://localhost:7001/eureka
management: # 监控暴露端点
endpoints:
web:
exposure:
include: "*"
ConfigClientMain3366
@EnableEurekaClient
@SpringBootApplication
public class ConfigClientMain3366{
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3366.class,args);
}
}
@RestController
@RefreshScope
public class ConfigClientController{
@Value("${server.port}")
private String serverPort;
@Value("${config.info}")
private String configInfo;![在这里插入图片描述](https://img-blog.csdnimg.cn/1bd0130034f44a7ca19f9923e72157e6.png#pic_center)
@GetMapping("/configinfo")
public String configInfo() {
return "serverPort: "+serverPort+" configInfo: "+configInfo;
}
}
同理新建cloud-config-client-3355模块。
测试:
修改GitHub上配置文件增加版本号:
config:
info: "master branch,springcloud-config/config-dev.yml version=2"
发送post请求:
curl -X POST "http://localhost:3344/actuator/bus-refresh"
访问http://localhost:3366/configinfo,获取配置信息,发现都已经刷新了。
spring cloud bus动态刷新定点通知
是指具体某一个实例生效而不是全部。
http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}
destination=微服务名:端口号
边栏推荐
- 精准时空行程流调系统—基于UWB超高精度定位系统
- 企业如何进行数据治理?分享数据治理4个方面的经验总结
- C language (structure) defines a user structure with the following fields:
- MySQL的安装
- HKUST & MsrA new research: on image to image conversion, fine tuning is all you need
- Ant manor safety helmet 7.8 ant manor answer
- 数据资产管理与数据安全国内外最新趋势
- 化工园区危化品企业安全风险智能化管控平台建设四大目标
- [solution] final app status- undefined, exitcode- 16
- [shell] summary of common shell commands and test judgment statements
猜你喜欢
当前发布的SKU(销售规格)信息中包含疑似与宝贝无关的字
Etcd database source code analysis -- starting from the start function of raftnode
Programmers' daily | daily anecdotes
Tkinter window selects PCD file and displays point cloud (open3d)
Handling hardfault in RT thread
多个kubernetes集群如何实现共享同一个存储
Haqi projection Black Horse posture, avec seulement six mois de forte pénétration du marché des projecteurs de 1000 yuans!
基于JS的迷宫小游戏
Ha Qu projection dark horse posture, only half a year to break through the 1000 yuan projector market!
unity3d学习笔记
随机推荐
HKUST & MsrA new research: on image to image conversion, fine tuning is all you need
ip地址那点事
Cloudcompare point pair selection
根据IP获取地市
Jmeter 5.5版本发布说明
隐马尔科夫模型(HMM)学习笔记
地质学类比较有名的外文期刊有哪些?
算法---比特位计数(Kotlin)
大促过后,销量与流量兼具,是否真的高枕无忧?
Install mongodb database
from .onnxruntime_pybind11_state import * # noqa ddddocr运行报错
POI导出Excel:设置字体、颜色、行高自适应、列宽自适应、锁住单元格、合并单元格...
Redhat5 installing vmware tools under virtual machine
循环肿瘤细胞——Abnova 解决方案来啦
Postgresql源码(60)事务系统总结
How to use wechat cloud hosting or cloud functions for cloud development of unapp development applet
dolphinscheduler3.x本地启动
How can I check the DOI number of a foreign document?
Overview of FlexRay communication protocol
网络基础 —— 报头、封装和解包