Spring Cloud Bus

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

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

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

1、提交代码触发post给客户端A发送bus/refresh 2、客户端A接收到请求从Server端更新配置并且发送给Spring Cloud Bus 3、Spring Cloud bus接到消息并通知给其它客户端 4、其它客户端接收到通知,请求Server端获取最新配置 5、全部客户端均获取到最新的配置 项目示例 客户端spring-cloud-config-client改造

1、添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
复制代码

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

2、配置文件

## 刷新时,关闭安全验证
management.security.enabled=false
## 开启消息跟踪
spring.cloud.bus.trace.enabled=truespring.rabbitmq.host=192.168.9.89
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
复制代码

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

3、测试 依次启动spring-cloud-eureka、spring-cloud-config-server、spring-cloud-config-client项目,在启动spring-cloud-config-client项目的时候我们会发现启动日志会输出这样的一条记录。

2017-05-26 17:05:38.568  INFO 21924 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/bus/refresh],methods=[POST]}" onto public void org.springframework.cloud.bus.endpoint.RefreshBusEndpoint.refresh(java.lang.String)
复制代码

说明客户端已经具备了消息总线通知的能力了,为了更好的模拟消息总线的效果,我们更改客户端spring-cloud-config-client项目的端口为8003、8004依次启动,这样测试环境就准备好了。启动后eureka后台效果图如下:

我们先分别测试一下服务端和客户端是否正确运行,访问:http://localhost:8001/neo-config/dev,返回信息:

{"name": "neo-config", "profiles": ["dev"], "label": null, "version": null, "state": null, "propertySources": [{"name": "https://github.com/ityouknow/spring-cloud-starter/config-repo/neo-config-dev.properties", "source": {"neo.hello": "hello im dev"}}]
}
复制代码

说明server端都正常读取到了配置信息。

依次访问:http://localhost:8002/hello、http://localhost:8003/hello、http://localhost:8004/hello,返回:hello im dev。说明客户端都已经读取到了server端的内容。

现在我们更新neo-config-dev.properties 中neo.hello的值为hello im dev update并提交到代码库中,访问:http://localhost:8002/hello 依然返回hello im dev。我们对端口为8002的客户端发送一个/bus/refresh的post请求。在win下使用下面命令来模拟webhook.

curl -X POST http://localhost:8002/bus/refresh 执行完成后,依次访问:http://localhost:8002/hello、http://localhost:8003/hello、http://localhost:8004/hello,返回:hello im dev update。说明三个客户端均已经拿到了最新配置文件的信息,这样我们就实现了图一中的示例。

技术架构图如下: 资料和源码来源

转载于:https://juejin.im/post/5c04a6416fb9a049ed309dbf

java B2B2C电子商务平台分析之十一------配置中心和消息总线相关推荐

  1. java B2B2C电子商务平台分析之八--配置中心svn示例和refresh

    国内很多公司都使用的svn来做代码的版本控制,我们先介绍以下如何使用svn+Spring Cloud Config来做配置中心.愿意了解源码的朋友直接求求交流分享技术:二一四七七七五六三三 svn版本 ...

  2. java B2B2C电子商务平台分析之十五-----EureKa服务注册与发现

    什么是服务发现与服务注册 简单的来说就是一个微服务要调用另一个微服务,就必须知道这个微服务的地址及端口信息.采用一张注册表,注册上线可用的微服务及相关信息,微服务则从注册表上查找所需的其它微服务的相关 ...

  3. (四)spring cloud微服务分布式云架构-配置中心和消息总线(配置中心终结版)...

    Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点.这会用在广播状态的变化(例如配置变化)或者其他的消息指令.Spring bus的一个核心思想是通过 ...

  4. SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪

    Config分布式配置中心 Config 概述 概述 • Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护. • 好处: • 集中管理配置文件 • 不同环境不同配 ...

  5. iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置

    技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...

  6. springcloud(九):配置中心和消息总线(配置中心终结版)

    我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...

  7. SpringCloud04 服务配置中心、消息总线、远程配置动态刷新

    1 环境说明 JDK:1.8 MAVENT:3.5 SpringBoot:2.0.5.RELEASE SpringCloud:Finchley.SR1 2 创建服务注册中心(Eureka服务端) 说明 ...

  8. SpringCloud微服务云架构构建B2B2C电子商务平台简介

    Spring Cloud是一系列框架的有序集合.利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现.注册.配置中心.消息总线.负载均衡.断路器.数据监控等(这里只简单的列了 ...

  9. springboot微服务 java b2b2c电子商务系统(一)服务的注册与发现(Eureka)

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

最新文章

  1. 虚拟机常用的内存查看与分析工具
  2. Linux日常之允许或禁止指定用户或IP进行SSH登录
  3. 学会阅读Java字节码
  4. 怎么一键排版_做了这么久的PPT!终于找到可以自动排版的插件了
  5. 报错 之 ModuleNotFoundError: No module named ‘setproctitle‘
  6. pythonui自动化测试脚本实战_Python UI自动化测试实战 Zero to Hero Se
  7. 拥有开源安全背景的开发员当选白宫技术总监
  8. 出现(n+1)/2次的数 — 给n个数字,求至少出现(N+1)/2次的那个数字?
  9. This is why you don’t think you’re creative 你为什么会觉得自己没有创造力?
  10. 三级数据库笔记(完整)
  11. python数据分析社区_python之数据分析
  12. 自定义数据类型的指针的含义
  13. 史上最全的PS快捷键大全
  14. openwrt编译ifb.ko模块问题
  15. Python利用Matplotlib绘图无法显示中文字体的解决方案
  16. 用js将二维数组转为json格式字符串
  17. Go语言与Java语言对比
  18. eltable 无数据文案修改_软文文案修改技巧:浅谈文章写作修改的几个方法
  19. 无锡设计培训——室内设计方案图纸包括哪些?
  20. 心理估值:什么样的价值对用户有意义?

热门文章

  1. java实习生入职_Java实习生入职测试
  2. name选择器_这33个超级好用的CSS选择器,你可能见都没见过
  3. c语言程序设计文件操作,c语言程序设计文件操作方法示例(CreateFile和fopen)
  4. android actionbaractivity 错误,Android studio无法解析ActionBarActivity
  5. python有哪些软件包用来考察变量之间的相关性_Python计算数据相关系数(person、Kendall、spearman)...
  6. C 回顾 volatile 和 register 修饰符
  7. FPGA之道(30)编写自己的vhdl库文件
  8. Verilog 中的 ^ 的用法
  9. 我对变量产生了这些想法
  10. Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)