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