首页 > 其他分享 >消息总线(Spring Cloud Bus)

消息总线(Spring Cloud Bus)

时间:2023-01-16 21:31:49浏览次数:40  
标签:bus cloud Cloud Spring config Bus localhost


前言

Spring Cloud Bus是什么?

  • Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新
  • Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,
    它整合了Java的事件处理机制和消息中间件的功能。
    Spring Clud Bus目前支持RabbitMQKafka

Spring Cloud Bus能干吗?

  • Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道。

消息总线(Spring Cloud Bus)_spring cloud

为何被称为总线?

  • 在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

基本原理

  • ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。

使用说明:

环境:先具备良好的RabbitMQ环境

SpringCloud Bus动态刷新全局广播

消息总线(Spring Cloud Bus)_Cloud_02

  1. 给配置中心服务端添加消息总线支持
<!--添加消息总线RabbitMQ支持-->
<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>
  1. bootstrap.yml
server:
port: 3344

spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: [email protected]:6666/springcloud-config.git #GitHub上面的git仓库名字
####搜索目录
search-paths:
- springcloud-config
####读取分支
label: master


#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka



##rabbitmq相关配置,暴露bus刷新配置的端点
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
management:
endpoints: #暴露bus刷新配置的端点
web:
exposure:
include: 'bus-refresh'
  1. 客户端多个)添加消息总线支持

pom

<!--添加消息总线RabbitMQ支持-->
<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>
server:
port: 3355

spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取
uri: http://localhost:3344 #配置中心地址k
#rabbitmq相关配置 15672是Web管理界面的端口;5672是MQ访问的端口
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest

#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*" # 'refresh'
  1. 启动注册中心,配置中心,客户端, 通过服务端、客户端访问git上的远程配置文件
    修改git上的配置文件,cmd 执行: curl -X POST “http://localhost:3344/actuator/bus-refresh”
    接着访问多个客户端可以发现都获取到了最新的配置信息,实现了一次修改,广播通知,处处生效。

  2. 消息总线(Spring Cloud Bus)_Cloud_03

SpringCloud Bus动态刷新定点通知

假设有两个客户端(端口号为3355 和 3366),修改了远程配置文件,只想要端口号为3355的更新,3366的不更新。指定具体某一个实例生效而不是全部 。

/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例

公式:http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}
destination: spring.application.name + server.port

这里以刷新运行在3355端口上的config-client为例

curl -X POST “http://localhost:3344/actuator/bus-refresh/config-client:3355”

消息总线(Spring Cloud Bus)_Cloud_04


什么都没有就代表执行成功。


标签:bus,cloud,Cloud,Spring,config,Bus,localhost
From: https://blog.51cto.com/u_14452299/6010841

相关文章

  • 写一个 Hello SpringBoot2 项目
     项目目录:helloSpringBoot2、MainApplication、pom.xml  helloSpringBoot2逻辑类,标记@RestController/*@RestController的作用等同于@Controller+@ResponseB......
  • Huaweicloud for 开发语言
    连续参加过几次华为云第三方满意度调研,我对华为云对开发者最不满意的一点就是对Top10常用语言的支持上很差,特别是对.NET的支持。经过连续多年(至少有3年了)的不断反馈,今天很......
  • Spring Cloud服务发现组件Eureka
    简介NetflixEureka是微服务系统中最常用的服务发现组件之一,非常简单易用。当客户端注册到Eureka后,客户端可以知道彼此的hostname和端口等,这样就可以建立连接,不需要配置。......
  • Spring中@Autowired和@Resource的区别及详细使用
    @Autowired是Spring提供的@Resource是J2EE提供的@Autowired:获得对象的方式称之为byType(通过类型),如果需要指定名字,那么需要使@Qualifier(“bean的名字”)在spring容......
  • Spring boot 配置热部署(两步即可)
    代码配置(步骤一)maven<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></depen......
  • 【elementUI + Spring报错解决方案】Required request part ‘*****‘ is not present
    出错描述  前端封装好文件数据,后端写好接口,一模一样的参数名,但是会报错:Requiredrequestpart'*’isnotpresent  前端代码:  后端代码:解决办法  在前端封装的时......
  • ORBSLAM-Atlas: a robust and accurate multi-map system
    摘要-我们提出ORBSLAM-Atlas,该系统能够处理无限制的非连接的子图的数量,其包括一个鲁棒的地图合并算法能够检测子图之间的公共区域并无缝融合他们。ORBSLAM算法杰出的鲁棒性......
  • Spring Cache 快速入门
    一、SpringCache快速入门1、SpringCache简介什么是SpringCache?SpringCache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。Spr......
  • spring boot 图文验证码(Kaptcha)使用
    如何使用可以直接去官网http://code.google.com/p/kaptcha/下载jar,或者在pom.xml中导入` <groupId>com.baomidou</groupId> <artifactId>kaptcha-spring-boot-sta......
  • yml文件配置了但是springboot读不到yml的内容的问题(已解决)
    在写项目时可能误操作加了这一句代码,结果就导致了系统读不到yml配置解决方法:删除pom.xml中的<packagin>pom</packagin>或者尝试 https://blog.csdn.net/qq_41555595/art......