`
公园美丽
  • 浏览: 11769 次
社区版块
存档分类
最新评论

SpringCloud:Spring Cloud Bus 消息总线

 
阅读更多

 

1. Spring Cloud Bus

Spring cloud bus通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其他的消息指令。Spring bus的一个核心思想是通过分布式的启动器对spring boot应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用AMQP消息代理作为通道,同样特性的设置(有些取决于通道的设置)在更多通道的文档中。

(了解源码可+求求: 1791743380)

大家可以将它理解为管理和传播所有分布式项目中的消息既可,其实本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有Kafka和RabbitMQ。利用bus的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一,我们用一张图来描述bus在配置中心使用的机制。

 

SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线
 

 

根据此图我们可以看出利用Spring Cloud Bus做配置更新的步骤:

  1. 提交代码触发post给客户端A发送bus/refresh
  2. 客户端A接收到请求从Server端更新配置并且发送给Spring Cloud Bus
  3. Spring Cloud bus接到消息并通知给其它客户端
  4. 其它客户端接收到通知,请求Server端获取最新配置
  5. 全部客户端均获取到最新的配置

2. 项目示例

我们使用上一篇文章中的config-server和config-client来进行改造,mq使用rabbitmq来做示例。

2.1 客户端config-client

2.1.1 添加依赖

Java代码  收藏代码
  1. <dependency>  
  2.     <groupId>org.springframework.cloud</groupId>  
  3.     <artifactId>spring-cloud-starter-bus-amqp</artifactId>  
  4. </dependency>  

 

需要多引入spring-cloud-starter-bus-amqp包,增加对消息总线的支持

2.1.2 配置文件 bootstrap.properties

Java代码  收藏代码
  1. spring.application.name=spring-cloud-config-client  
  2. server.port=8081  
  3.   
  4. spring.cloud.config.name=springcloud-config  
  5. spring.cloud.config.profile=dev  
  6. spring.cloud.config.label=master  
  7. spring.cloud.config.discovery.enabled=true  
  8. spring.cloud.config.discovery.serviceId=spring-cloud-config-server  
  9.   
  10. eureka.client.service-url.defaultZone=http://localhost:8761/eureka/  
  11.   
  12. management.endpoints.web.exposure.include=*  
  13.   
  14. ## 开启消息跟踪  
  15. spring.cloud.bus.trace.enabled=true  
  16.   
  17. spring.rabbitmq.host=127.0.0.1  
  18. spring.rabbitmq.port=5672  
  19. spring.rabbitmq.username=  
  20. spring.rabbitmq.password=  

 

配置文件需要增加RebbitMq的相关配置,这样客户端代码就改造完成了。

2.1.3 测试

依次启动eureka,config-serve,config-client。

修改config-client启动配置,同时在8081和8082端口启动服务。

启动完成后,浏览器分别访问连接:http://localhost:8081/hello, http://localhost:8082/hello, 可以发现页面显示的内容都是:hello dev update1,说明客户端都已经读取到了server端的内容。

现在我们更新github上的配置文件,将配置内容改为hello dev update,先访问一下http://localhost:8081/hello,可以看到页面依然显示为:hello dev update1。

我们对端口为8081的服务发送一个/actuator/bus-refresh的POST请求,在win10下使用下面命令来模拟webhook。

Java代码  收藏代码
  1. curl -X POST http://localhost:8081/actuator/bus-refresh  

 

注意: 在springboot2.x的版本中刷新路径为:/actuator/bus-refresh,在springboot1.5.x的版本中刷新路径为:/bus/refresh。

执行完成后,我们先访问http://localhost:8082/hello,可以看到页面打印内容已经变为:hello dev update,这样说明,我们8081端口的服务已经把更新后的信息通过rabbitmq推送给了8082端口的服务,这样我们就实现了图一中的示例。

2.2 改进版

上面的流程中,虽然我们做到了利用一个消息总线触发刷新,而刷新所有客户端配置的目的,但是这种方式并不合适,如下:

  • 打破了微服务的职责单一性。微服务本身是业务模块,它本不应该承担配置刷新的职责。
  • 破坏了微服务各节点的对等性。
  • 如果客户端ip有变化,这时我们就需要修改WebHook的配置。

我们可以将上面的流程改进一下:

 

SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线
 

 

这时Spring Cloud Bus做配置更新步骤如下:

  1. 提交代码触发post给Server端发送bus/refresh
  2. Server端接收到请求并发送给Spring Cloud Bus
  3. Spring Cloud bus接到消息并通知给其它客户端
  4. 其它客户端接收到通知,请求Server端获取最新配置
  5. 全部客户端均获取到最新的配置

这样的话我们在server端的代码做一些改动,来支持/actuator/bus-refresh

和上面的client端的改动基本一致

2.2.1 添加依赖

Java代码  收藏代码
  1. <dependency>  
  2.     <groupId>org.springframework.cloud</groupId>  
  3.     <artifactId>spring-cloud-starter-bus-amqp</artifactId>  
  4. </dependency>  

 

需要多引入spring-cloud-starter-bus-amqp包,增加对消息总线的支持

2.2.2 配置文件application.yml

Java代码  收藏代码
  1. server:  
  2.   port: 8080  
  3. spring:  
  4.   application:  
  5.     name: spring-cloud-config-server  
  6.   cloud:  
  7.     config:  
  8.       server:  
  9.         git:  
  10.           uri: https://github.com/meteor1993/SpringCloudLearning  
  11.           search-paths: chapter6/springcloud-config  
  12.           username:   
  13.           password:   
  14.   rabbitmq:  
  15.     host: 217.0.01  
  16.     port: 5672  
  17.     username:   
  18.     password:   
  19. management:  
  20.   endpoints:  
  21.     web:  
  22.       exposure:  
  23.         include: "*"  
  24. eureka:  
  25.   client:  
  26.     service-url:  
  27.       defaultZone: http://localhost:8761/eureka/  

 

配置文件需要增加RebbitMq的相关配置,actuator开启所有访问。

2.2.3 测试

依次启动eureka,config-serve,config-client。

修改config-client启动配置,同时在8081和8082端口启动服务。

按照上面的测试方式,访问两个客户端测试均可以正确返回信息。同样修改配置文件,将值改为:hello im dev update并提交到仓库中。在win10下使用下面命令来模拟webhook。

Java代码  收藏代码
  1. curl -X POST http://localhost:8081/actuator/bus-refresh  

 

执行完成后,依次访问两个客户端,返回:hello im dev update。说明三个客户端均已经拿到了最新配置文件的信息,这样我们就实现了上图中的示例。

分享到:
评论

相关推荐

    SpringCloud之八 消息总线SpringCloudBus.pdf

    SpringCloud之八 消息总线SpringCloudBus.pdf,微服务中消息总线的使用处理

    08Spring Cloud Bus:消息总线1

    08Spring Cloud Bus:消息总线1

    SpringCloud——消息总线(Bus)

    SpringCloud——消息总线(Bus)之Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。

    尚硅谷SpringCloud第2季2020版.mmap

    SpringCloud Bus 消息总线 SpringCloud Stream 消息驱动 SpringCloud Sleuth 分布式请求链路跟踪 SpringCloud Alibaba入门简介 SpringCloud Alibaba Nacos 服务注册和配置中心 SpringCloud Alibaba Sentinel ...

    Spring Cloud.docx

    spring-cloud-eureka Spring Cloud(一)服务的注册与发现(Eureka) spring-cloud-consul ...Spring Cloud(二) ...Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

    springCloud项目练习

    第八课: 消息总线(Spring Cloud Bus) 第九课: 服务链路追踪(Spring Cloud Sleuth) 第十课: 高可用的服务注册中心 第十一课:docker部署spring cloud项目 第十二课: 断路器监控(Hystrix Dashboard) 第十三课: ...

    springcloud微服务框架+服务模版

    spring-cloud-config-eureka-bus:配置中心和消息总线示例(配置中心终结版) gateway-service-zuul:Spring Cloud Zuul使用初级篇 网关 均衡负载 spring-cloud-zuul:Spring Cloud Zuul使用高级篇 Filter 鉴权 熔断...

    spring-cloud使用的各种示例

    - [springcloud(九):配置中心和消息总线(配置中心终结版)](http://www.ityouknow.com/springcloud/2017/05/26/springcloud-config-eureka-bus.html) - [springcloud(十):服务网关zuul]...

    SpringCloud教程

    史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus) 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth) 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心 史上...

    spring-cloud-bus:Spring Cloud事件总线

    spring-cloud-bus:Spring Cloud事件总线

    spring-cloud-examples

    spring-cloud-config-eureka-bus:配置中心和消息总线示例(配置中心终结版) gateway-service-zuul:Spring Cloud Zuul使用初级篇 网关 均衡负载 spring-cloud-zuul:Spring Cloud Zuul使用高级篇 Filter 鉴权 熔断...

    SpringCloud:SpringCloud学习

    SpringCloud SpringCloud学习 ...3、服务消费者(rest+ribbon) 4、服务消费者(Feign) 5、断路器(Hystrix) ...9、消息总线(Spring Cloud Bus) 10、服务链路追踪(Spring Cloud Sleuth) 12、服务注册Consul

    java8rt.jar源码-SpringCloud:学习SpringCloud

    服务总线:Bus(已停更)/Nacos ... SpringCloud:分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。 微服务一般分为无业务基础服务(如全局配置、ID自增器、短链接服务、文件...

    积分管理系统java源码-SpringCloud-Learning:SpringCloud-Learning

    Bus:事件、消息总线,用于传播集群中的状态变化或事件 Spring Cloud Consul:服务发现与配置管理工具 Spring Cloud Stream:通过简单的声明式模型来发送和接收消息,整合了Rabbit和Kafka Spring Cloud Security:...

    59道SpringCloud面试题详解含答案(值得珍藏)

    Spring Cloud是基于Spring Boot提供的一套微服务解决方案,包括服务...Spring Cloud还提供了一系列的子项目和工具,如Spring Cloud Bus(事件/消息总线)、Spring Cloud Security(基于springsecurity的安全工具包)

    SpringCloud之消息总线Spring Cloud Bus实例代码

    主要介绍了SpringCloud之消息总线Spring Cloud Bus实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    微服务架构与SpringCloud.pptx

    文档中详细介绍了spring cloud的相关组件,包含了服务发现与注册 Eureka,服务消费 Ribbon 和 Reign,链路监控 Sleuth,断路器(熔断器)Hystrix,分布式配置中心 Config,消息总线 Bus,服务网关 Zuul,Spring Boot...

    SpringCloud思维导图

    14.SpringCloud Bus
消息总线 15.SpringCloud Stream
消息驱动 16.SpringCloud Sleuth
分布式请求链路跟踪 17. Apollo配置中心 18.SpringCloud Alibaba
入门简介 19.SpringCloud Alibaba
Nacos服务注册和配置...

    SpringCloud消息总线RabbitMQ+Bus-Refresh接口触发所有config-client自动重新读取配置文件

    实践方志鹏博客搭建Springcloud+RabbitMQ+Config-client+config-server Eureka-server的微服务架构,通过/bus/refresh接口触发所有config-client自动从config-server重新读取配置文件。SpringCloud和SpringBoot版本...

    SpringCloud消息总线Bus配置中心实现过程解析

    主要介绍了SpringCloud消息总线Bus配置中心实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics