java B2B2C电子商务平台分析之十一------配置中心和消息总线
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电子商务平台分析之十一------配置中心和消息总线相关推荐
- java B2B2C电子商务平台分析之八--配置中心svn示例和refresh
国内很多公司都使用的svn来做代码的版本控制,我们先介绍以下如何使用svn+Spring Cloud Config来做配置中心.愿意了解源码的朋友直接求求交流分享技术:二一四七七七五六三三 svn版本 ...
- java B2B2C电子商务平台分析之十五-----EureKa服务注册与发现
什么是服务发现与服务注册 简单的来说就是一个微服务要调用另一个微服务,就必须知道这个微服务的地址及端口信息.采用一张注册表,注册上线可用的微服务及相关信息,微服务则从注册表上查找所需的其它微服务的相关 ...
- (四)spring cloud微服务分布式云架构-配置中心和消息总线(配置中心终结版)...
Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点.这会用在广播状态的变化(例如配置变化)或者其他的消息指令.Spring bus的一个核心思想是通过 ...
- SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪
Config分布式配置中心 Config 概述 概述 • Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护. • 好处: • 集中管理配置文件 • 不同环境不同配 ...
- iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置
技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...
- springcloud(九):配置中心和消息总线(配置中心终结版)
我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...
- SpringCloud04 服务配置中心、消息总线、远程配置动态刷新
1 环境说明 JDK:1.8 MAVENT:3.5 SpringBoot:2.0.5.RELEASE SpringCloud:Finchley.SR1 2 创建服务注册中心(Eureka服务端) 说明 ...
- SpringCloud微服务云架构构建B2B2C电子商务平台简介
Spring Cloud是一系列框架的有序集合.利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现.注册.配置中心.消息总线.负载均衡.断路器.数据监控等(这里只简单的列了 ...
- springboot微服务 java b2b2c电子商务系统(一)服务的注册与发现(Eureka)
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
最新文章
- 虚拟机常用的内存查看与分析工具
- Linux日常之允许或禁止指定用户或IP进行SSH登录
- 学会阅读Java字节码
- 怎么一键排版_做了这么久的PPT!终于找到可以自动排版的插件了
- 报错 之 ModuleNotFoundError: No module named ‘setproctitle‘
- pythonui自动化测试脚本实战_Python UI自动化测试实战 Zero to Hero Se
- 拥有开源安全背景的开发员当选白宫技术总监
- 出现(n+1)/2次的数 — 给n个数字,求至少出现(N+1)/2次的那个数字?
- This is why you don’t think you’re creative 你为什么会觉得自己没有创造力?
- 三级数据库笔记(完整)
- python数据分析社区_python之数据分析
- 自定义数据类型的指针的含义
- 史上最全的PS快捷键大全
- openwrt编译ifb.ko模块问题
- Python利用Matplotlib绘图无法显示中文字体的解决方案
- 用js将二维数组转为json格式字符串
- Go语言与Java语言对比
- eltable 无数据文案修改_软文文案修改技巧:浅谈文章写作修改的几个方法
- 无锡设计培训——室内设计方案图纸包括哪些?
- 心理估值:什么样的价值对用户有意义?
热门文章
- java实习生入职_Java实习生入职测试
- name选择器_这33个超级好用的CSS选择器,你可能见都没见过
- c语言程序设计文件操作,c语言程序设计文件操作方法示例(CreateFile和fopen)
- android actionbaractivity 错误,Android studio无法解析ActionBarActivity
- python有哪些软件包用来考察变量之间的相关性_Python计算数据相关系数(person、Kendall、spearman)...
- C 回顾 volatile 和 register 修饰符
- FPGA之道(30)编写自己的vhdl库文件
- Verilog 中的 ^ 的用法
- 我对变量产生了这些想法
- Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)