学习
实践
活动
专区
工具
TVP
写文章

Spring Cloud高可用的分布式配置中心 Spring Cloud Bus 消息总线集成

上一篇文章,留了一个悬念, 实现配置的实时更新,我们可以使用 接口触发,如果所有客户端的配置的更改,都需要手动触发客户端 ,当服务越来越多的时候,那岂不是维护成本很高,显然不太合适,而使用 消息总线实现方案,可以优雅的解决以上问题,那就是通过消息代理中间件 加 的 來触发配置的更新,那具体是怎么实现的,我会通过图文形式介绍。

Spring Cloud Bus

将分布式系统的节点通过轻量级消息代理连接起来。用于在集群中传播状态更改(例如配置更改事件)或其他管理指令。 的一个核心思想是通过分布式的启动器对 应用进行扩展,也可以用来建立一个或多个应用之间的通信频道。目前唯一实现的方式是用 消息代理作为通道,但是相同的基本功能集(还有一些取决于传输)在其他传输的路线图上

消息总线

消息总线是一种通信工具,可以在机器之间互相传输消息、文件等。消息总线扮演着一种消息路由的角色,拥有一套完备的路由机制来决定消息传输方向。发送段只需要向消息总线发出消息而不用管消息被如何转发。 通过轻量消息代理连接各个分布的节点。管理和传播所有分布式项目中的消息,本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有 和 。 下面是一个配置中心刷新配置的例子

[图片来源于网络如有侵权请私信删除]

1、提交代码触发 请求给

2、 端接收到请求并发送给

3、 接到消息并通知给其它客户端

4、其它客户端接收到通知,请求 端获取最新配置

5、全部客户端均获取到最新的配置

消息代理

消息代理( )是一种消息验证、传输、路由的架构模式。消息代理是一个中间件产品,它的核心是一个消息的路由程序,用来实现接收和分发消息,并根据设定好的消息处理流来转发给正确的应用。它包括独立的通信和消息传递协议,能够实现组织内部和组织间的网络通信。设计代理的目的就是为了能够从应用程序中传入消息,并执行一些特别的操作。

和组织间的网络通信。设计代理的目的就是为了能够从应用程序中传入消息,并执行一些特别的操作。 现有的消息代理开源产品:

目前 支持 和 、

RabbitMQ简介

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如: 等,支持 。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

,即 ,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

Github:https://github.com/rabbitmq

官网地址:http://www.rabbitmq.com

安装RabbitMQ

安装RabbitMQ 可以参考之前的文章

CentOs7.3 搭建 RabbitMQ 3.6 单机服务:

https://segmentfault.com/a/1190000010693696

CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务:

https://segmentfault.com/a/1190000010702020

Spring Boot 中使用 RabbitMQ: https://segmentfault.com/a/1190000011577243

准备工作

以下项目修改不做过多解释,部分代码不再展示,请阅读上篇文章,Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh:http://www.ymq.io/2017/12/23/spring-cloud-config-eureka-refresh/

把上一篇,示例代码下载,才可以进行一下的操作,下载地址在文章末尾

Config Server

在项目 进行以下操作

添加依赖

添加配置

在 添加以下配置.关闭安全认证

RabbitMQ的 用户是手动创建的,具体阅读上面 安装 部分

Config Client

修改第上一篇文章项目

添加依赖

添加配置

在 添加以下配置.关闭安全认证

测试服务启动RabbitMQ

启动MQ服务

查看MQ状态

启动项目

按照顺序依次启动项目

启动该工程后,访问服务注册中心,查看服务是否都已注册成功:http://127.0.0.1:8761/

Exchanges

任何发送到 的消息都会被转发到与该 绑定( )的所有 队列 上。

检查Queues

浏览器打开 :http://192.168.252.128:15672/

修改配置

修改 仓库配置,在 后面加上

查看 Config Server

通过 发送 请求到:http://localhost:8888/springCloudConfig/dev/master 查看 是否是最新的值

查看 Config Client

命令窗口,通过 访问服务,或者在浏览器访问 F5 刷新

发现没有得到最新的值

因为我们没有主动触发 接口

刷新配置

通过 发送 请求到:http://localhost:8888/bus/refresh ,我们可以看到以下内容:

注意是 请求

三个 客户端控制台,分别会打印以下内容意思就是,收到远程更新请求, 刷新, 是

再次查看 Config Client

访问:http://localhost:8081/ ,http://localhost:8082/ ,http://localhost:8083/ 已经刷新了配置

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180120G087LU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券