首页 > 编程知识 正文

springcloud遇到的问题,bus

时间:2023-05-06 03:29:05 阅读:8945 作者:2851

一、Bus概要1、Spring cloud bus简介

Spring cloud bus通过轻量消息代理连接分散的各节点。 它用于广播状态的变化(如配置更改)和其他消息指令。 SpringCloud bus的一个核心思想是通过分布式启动器扩展spring boot APP应用程序。 它还可以用于建立多个APP应用之间的通信信道。 目前实现的唯一方法是使用amqpmessageagent作为通道。 根据通道设置,相同的特性设置位于更多通道的文档中。 可以理解为管理和发布所有分布式项目的消息,但实际上是利用MQ的广播机制在分布式系统中发布消息,目前常用的是Kafka和RabbitMQ。 利用总线的结构可以做各种各样的事情。 其中,刷新配置中心客户端是典型的应用场景之一。 用图说明bus在构成中心使用的结构。根据此图我们可以看出利用Spring Cloud Bus做配置更新的步骤:

发送代码后,开机自检将向客户端a发送总线/刷新

客户端a从服务器端接收配置更新请求,并将其发送到Spring Cloud Bus

springcloudbus接收消息并通知其他客户端

其他客户端收到通知并请求服务器端进行最新配置

所有客户端最新配置2、什么是总线

微服务体系结构系统通常使用轻量级消息代理构建公共消息主题,并连接系统中的所有微服务实例。 他被称为消息总线,因为在此主题中生成的消息将被所有实例截获和消耗。 消息总线上的每个实例都可以很容易地广播,以便向连接到主题的其他实例通告消息。

基本原理

config客户端实例接收MQ中的同一主题。 默认值为SpringCloudBus。 当一个服务更新数据时,他会将此信息放入主题中,以便其他监听同一主题的服务收到通知并更新自己的配置。消息队列知识及RibbitMQ安装使用:单击以获取3358 www.Sina.com/http://www.Sina.com /

http://www.Sina.com/http://www.Sina.com /明显b方法方式更优1更合适。 a方法不合适的理由如下:

打破了微服务职责的单一性。 因为微服务本身就是业务模块,所以它本身不应该承担配置创新的责任。 破坏微服务各节点的对等性。 有一定的局限性。 例如,微服务在转移时网络地址经常发生变化,在这种情况下,如果想要实现自动更新,就会进行更多的修改。 http://www.Sina.com/http://www.Sina.com /

a、向配置中心3344模块pom添加依赖项

! -消息总线RabbitMQ支持----dependencygroupidorg.spring framework.cloud/groupidartifactidspring-cloud-starter-bus 添加ependencydependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-actuator/artifact id /

spring: #rabbitmq相关配置: 15672是Web管理界面端口; 5672是MQ访问端口rabbit MQ : host : localhost或服务器ipport :5672 username : guest password 3360 guest # rabbbit MQ相关配置, bus刷新配置端点管理: end points 3360 web : exposure : include : ' bus-refresh ' http://www.Sina.com /

a、向3355和3366模块pom添加依赖项

! -消息总线RabbitMQ支持----dependencygroupidorg.spring framework.cloud/groupidartifactidspring-cloud-starter-bus

t;dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

b、在bootstrap.yml添加如下配置

spring: #rabbitmq相关配置:15672是Web管理界面的端口;5672是MQ的访问端口 rabbitmq: host: localhost或服务器ip port: 5672 username: guest password: guest#暴露监控端点management: endpoints: web: exposure: include: "*"

(3)启动测试


修改GitHub上配置文件config-dev.yml的version=4,然后向Server配置中心发送一次请求curl -X POST "http://localhost:3344/actuator/bus-refresh":
3344发送成功之后,所有连接到此Config配置中心的Client都会自动刷新新的配置:


(4)RabbitMQ所起到的作用
这时打开RabbitMQ的web管理界面http://localhost或服务器ip:15672,登录之后查看:
这就符合前面所说的总线的基本原理:ConfigClient实例都监听MQ中同一个topic(默认名:SpringCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其他监听此topic的服务就能得到通知,然后去更新自身的配置。

4、SpringCloud Bus动态刷新定点通知
就像将配置中心比作一个公众号,客户端就像订阅公众号的人。广播通知能够让所有人都就收到消息推送;而定点通知能够实现让部分人接收到消息推送(公众号不想让你收到信息你就会被屏蔽)。
(1)具体操作

指定某一实力生效而不是全部。公式:http://localhost:配置中心端口号/actuator/bus-refresh/{destination}。/bus/refresh请求不在发送到具体的实例上,而是发给config server并通过destination参数类指定需要更新的的服务或实例。

(2)只给3355发而3366不发通知
其他操作都一样,唯一不同的是发送通知的时候为刷新请求为:
http://localhost:3344/actuator/bus-refresh /config-client:3355

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。