spring CloudBus 将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是,消息总线可以为微服务做监控,也可以作为应用程序之间相互通讯。本文要讲述的是用AMQP实现通知微服务架构的配置文件的更改。

一、准备工作

本文还是基于上一篇文章来实现。按照官方文档,我们只需要在配置文件中配置 spring-cloud-starter-bus-amqp ;这就是说我们需要装rabbitMq,点击rabbitmq下载。至于怎么使用 rabbitmq,搜索引擎下。

二、改造config-client

在pom文件加入spring-cloud-starter-bus-amqp,完整的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.forezp</groupId><artifactId>config-client</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>config-client</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</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-aop</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><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></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

在配置文件中加入:


spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
# spring.rabbitmq.username=
# spring.rabbitmq.password=

如果rabbitmq有用户名密码,输入即可。

依次启动eureka-server、confg-cserver,启动两个config-client,端口为:8881、8882。

访问http://localhost:8881/hi 或者http://localhost:8882/hi 浏览器显示:

foo version 3

这时我们去代码仓库将foo的值改为“foo version 4”,即改变配置文件foo的值。如果是传统的做法,可以需要重启服务,才能达到配置文件的更新。此时,我们只需要用post请求:http://localhost:8881/bus/refresh:

重新读取配置文件:

这时我们再访问http://localhost:8881/hi 或者http://localhost:8882/hi 浏览器显示:

foo version 4

另外,/bus/refresh接口可以指定服务,即使用”destination”参数,比如 “/bus/refresh?destination=customers:**” 即刷新服务名为customers的所有服务,不管ip。

三、分析

此时的架构图:

当Git文件更改的时候,通过pc端用post 向端口为8882的config-client发送请求/bus/refresh/;此时8882端口会发送一个消息,由消息总线向其他服务传递,从而使整个微服务集群都达到更新配置文件。

四、其他

可以用作自定义的Message Broker,只需要spring-cloud-starter-bus-amqp, 然后再配置文件写上配置即可,同上。

Tracing Bus Events:
需要设置:spring.cloud.bus.trace.enabled=true,如果那样做的话,那么Spring Boot TraceRepository(如果存在)将显示每个服务实例发送的所有事件和所有的ack,比如:(来自官网)

{"timestamp": "2015-11-26T10:24:44.411+0000","info": {"signal": "spring.cloud.bus.ack","type": "RefreshRemoteApplicationEvent","id": "c4d374b7-58ea-4928-a312-31984def293b","origin": "stores:8081","destination": "*:**"}},{"timestamp": "2015-11-26T10:24:41.864+0000","info": {"signal": "spring.cloud.bus.sent","type": "RefreshRemoteApplicationEvent","id": "c4d374b7-58ea-4928-a312-31984def293b","origin": "customers:9000","destination": "*:**"}},{"timestamp": "2015-11-26T10:24:41.862+0000","info": {"signal": "spring.cloud.bus.ack","type": "RefreshRemoteApplicationEvent","id": "c4d374b7-58ea-4928-a312-31984def293b","origin": "customers:9000","destination": "*:**"}
}

本文源码下载:
https://github.com/forezp/SpringCloudLearning/tree/master/chapter8

原文:http://blog.csdn.net/forezp/article/details/70148235

消息总线(Spring Cloud Bus)相关推荐

  1. 原 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f8-bus/ 本文出自方志朋的博客 转载请标明出处: Spr ...

  2. 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)

    首先:欢迎各位学习java和大数据的程序员朋友们加入Java交流学习群: 721506929,群内提供免费的架构学习资料,有需要的朋友可以进群来学习. https://www.fangzhipeng. ...

  3. 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)

    转:https://blog.csdn.net/forezp/article/details/70148235 Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播 ...

  4. SpringCloud学习(八)消息总线(Spring Cloud Bus)(Finchley版本)

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  5. SpringCloud学习笔记 - 消息总线 - Spring Cloud Bus

    1. 消息总线简介 消息代理中间件构建了一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有微服务实例监听和消费. 消息代理又是什么?消息代理是一个消息验证.传输.路由的架构模式,主 ...

  6. (八)java版spring cloud+spring boot 社交电子商务平台-消息总线(Spring Cloud Bus)

    电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要 ...

  7. java版spring cloud+spring boot+redis社交电子商务平台(八)消息总线(Spring Cloud Bus)

    B2B2C电子商务平台源码请加企鹅求求:一零三八七七四六二六.Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控. ...

  8. SpringCloud微服务云架构构建B2B2C电子商务平台之-(八)消息总线(Spring Cloud Bus)...

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  9. Java版本多用户B2B2C商城源码-(八)消息总线(Spring Cloud Bus)

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

最新文章

  1. 计算机网络谢希仁第七版课后答案第三章 数据链路层
  2. java语言避免了大多数的什么_Java 语言避免了大多数的▁错误。( )_学小易找答案...
  3. Python实现换位加密
  4. python中subprocess_Python中subprocess学习
  5. Maximal Rectangle leetcode java
  6. MIME协议及源邮件格式分析
  7. [转]Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
  8. mysql获取多张表中的数据_mysql – 从具有递归关系的两个表中获取数据
  9. SWAT模型在水文水资源、面源污染模拟中的实践技术应用
  10. Python社区发现—Louvain—networkx和community
  11. 软件工程导论知识点总结
  12. python整形_Python中的最大整型数值
  13. MSE 支持 Apache Shenyu 网关实现全链路灰度
  14. 智能快递柜 软件架构 linux,13.智能快递柜(对接流程)
  15. JMeter 进行 MD5加密
  16. 虚幻4渲染编程(环境模拟篇)【第一卷:体积云天空模拟(1)---层云】
  17. 大疆A型板使用经验分享(八)——FreeRTOS操作系统的使用
  18. X站全称是什么_站群的狂欢已经远去,还能拿什么年入百万?
  19. 用友T6 总账和明细账对账不平.是往来核算明细账有数据总账为0
  20. 区块链项目ICO注意事项

热门文章

  1. PYTHON高级全栈开发工程师-老男孩教育
  2. mac下打开FTP服务
  3. 网络通讯程序整理(一)
  4. linux下忘记mysql root密码
  5. Cacti(一)之“better-cacti-templates”
  6. python教程怎么读_python怎么读二进制文件
  7. 使用驱动器f:中的光盘之前需要将其格式化_mac虚拟光驱Daemon Tools高级功能详解—光盘刻录...
  8. Nessus提示API Disabled错误
  9. Xcode控制台打印集锦
  10. Nilearn教程系列(2)-3D和4D niimgs:处理和可视化