请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 70|回复: 1

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

[复制链接]
发表于 2018-12-3 16:26:29 | 显示全部楼层 |阅读模式
Spring Cloud Bus

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

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

根据此图我们可以看出利用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、添加依赖
  1. <p><dependency></p><p>    <groupId>org.springframework.cloud</groupId></p><p>    <artifactId>spring-cloud-starter-bus-amqp</artifactId></p><p></dependency></p>
复制代码

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

2、配置文件
  1. <p>## 刷新时,关闭安全验证</p><p>management.security.enabled=false</p><p>## 开启消息跟踪</p><p>spring.cloud.bus.trace.enabled=true</p><p> </p><p>spring.rabbitmq.host=192.168.9.89</p><p>spring.rabbitmq.port=5672</p><p>spring.rabbitmq.username=admin</p><p>spring.rabbitmq.password=123456</p>
复制代码

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

3、测试
依次启动spring-cloud-eureka、spring-cloud-config-server、spring-cloud-config-client项目,在启动spring-cloud-config-client项目的时候我们会发现启动日志会输出这样的一条记录。
  1. <p>
  2. </p><p>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)</p>
复制代码

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

eureka后台效果图.jpg

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

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

说明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。说明三个客户端均已经拿到了最新配置文件的信息,这样我们就实现了图一中的示例。

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


 楼主| 发表于 2018-12-3 16:26:54 | 显示全部楼层
喜欢的朋友可以持续关注更新文章!
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2018-12-13 02:30 , Processed in 0.253565 second(s), 7 queries , File On.

快速回复 返回顶部 返回列表