SpringCloud消息总线BUS

消息总线BUS

前言

上节我们说到配置动态刷新,还记得上节我们是更新了配置仓库之后,客户端需要调一个/refresh接口来实现客户端配置的重新加载,当然如果我们的客户端数量比较少,这种方式没太多问题,但是当我们客户端数量很多的情况下,每个客户端都去刷新一次成本还是比较大的,所以我们引入今天的这个组件SC-BUS来实现动态刷新。

什么是BUS?

Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。这可以用于广播状态更改(例如配置更改)或其他管理指令。一个关键的想法是,Bus就像一个扩展的Spring Boot应用程序的分布式执行器,但也可以用作应用程序之间的通信渠道。当前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(还有一些取决于传输)在其他传输的路线图上。

实现动态刷新的思路?

首先我们可以大致看下,这个SC的注册中心个配置中心是如何配合工作的,大概结构如下图所示:

配置中心和我们的服务都作为Eureka的一个客户端服务,同时我们的每个客户端又作为配置中心的客户端角色,所以这里配置中心和客户端服务担任这多重角色身份,至于配置中心和客户端服务如何注册为Eureka的客户端这里就不介绍了,之前我们已经说过;客户端服务作为配置中心的客户端这个也不介绍了,上节有介绍。我们说说今天配置刷新的问题;

很明显我们知道要加载最新的配置最终的手段都是客户端调/refresh接口刷新,所以方案也很明显,手动为每个客户端刷新和客户端主动全部自己刷新。

方案一:当我们配置仓库发生更新的时候,我们依次调用每个客户端的/refresh;

方案二:通过消息队列,发布订阅模式,当我们配置仓库发生更新时,发送一个消息到某个topic下,客户端订阅该topic,消费消息,客户端消费动作就是去调/refresh,实现全部自动刷新配置;

如何整合BUS?

上述所说的方案二其实就是SC BUS的思路,消息总线现阶段只支持2种MQ,RabbitMQ和Kafka,下面我们讲下这2种,主要以Kafka为主;

结构图如下:

下面讲下客户端如何修改

Kafka

RabbitMQ

application.yml配置文件(Kafka也类似,也可以不配置,不配置就走默认):

然后就是客户端刷新注解@RefreshScope

在我们需要用到配置的地方加上注解即可

这样我们就把BUS搭建好了。

拓展:

ok,我们要将Kafka特别说明下,因为我自己也是整合的Kafka,Kafka搭建是依赖于zk的,所以我们还需要下面这些步骤:

搭建zk(当然你也可以依赖Kafka里面自带的zk)

搭建Kafka

下载地址:http://mirror.bit.edu.cn/apache/zookeeper/ 解压(开箱即用)

修改配置文件:conf文件下zoo_sample.cfg为了方便可以先改个名例如zoo.cfg,修改dataDir日志目录为本地一个文件夹

配置环境变量:新建ZOOKEEPER_HOME:指向你的zk文件夹 在path中加入zk环境变量:%ZOOKEEPER_HOME%\bin

打开cmd,输入:zkserver,然后会看到日志输出 binding to port 0.0.0.0/0.0.0.0:2181表示配置成功,端口为2181

kafka安装配置

修改配置文件:server.properties中的log目录

打开bin目录我们会发现在Kafka中除了sh文件(linux环境下的文件)之外还有一个windows文件夹,里面存放着window平台下的一些文件(包括启动,注销)此外,在Kafka的conf文件夹下面,还有一些配置文件,例如server.properties,zookeeper.properties(这里要特别说明下,Kafka是需要借助zk来完成工作的,我们可以使用Kafka内置的zk来工作也可以启动自己的zk,只需要配置好了就行,关于这一点我们也可以在libs下能看到,里面也有zk的jar和zk-cli包)

ok,kafka其实就已经安装好了!!!下面开始使用

启动Kafka

第一步:先启动zk,执行zkserver其实就可以了,或者在kafka目录下通过zk配置文件启动

第二步:启动kafka 通过下列命令来启动kafka服务器 .\bin\windows\kafka-server-start.bat .\config\server.properties

第三步:创建生产者Producer同时创建主题topic,也可以在开启生产者的时候指定一个topic: .\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test

第三步:创建消费者Consumer: .\kafka-console-consumer.bat --zookeeper localhost:2181 --topic test

ok,其实到这里一个Kafka实例就已经跑起来了

到这我们就将配置中心和服务中心以及自动刷新介绍完了,都属于案例级别,实际生产中还需要根据各自公司的实际场景进行调整。感谢阅读!!!

相关代码:https://github.com/Justincyb/springcloud/tree/justin

END

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

扫码关注云+社区

领取腾讯云代金券