消息总线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
领取专属 10元无门槛券
私享最新 技术干货