SpringCloud系列:8.微服务消息总栈Bus

一、Bus简介

Spring Cloud Bus是一个轻量级的通信组件,它构建在Spring Cloud Stream(Spring Cloud的消息驱动)之上,可以将分布式系统中的节点与轻量级消息代理连接,从而实现状态更改广播或其他事件的广播。

实现上Spring Cloud Bus基于Spring事件驱动模型。Spring事件驱动模型包含以下3个基本概念:

·事件:ApplicationEvent
·事件监听者:ApplicationListener
·事件发布者:ApplicationEventPublisher


由于Spring Cloud Bus可以实现状态更改广播,所以结合Spring Cloud Config,一个振奋人心的功能便诞生了,那就是配置文件信息的动态刷新。

使用Bus后,应用架构图将如下所示。

二、示例演示

项目依旧使用上一章节的代码,需要特别说明下,因为Spring Cloud Bus是基于消息队列的实现,目前只包含了Kafka和RabbitMq的封装,所以必须要安装两者之一才可以使用。这里我使用的是RabbitMq。

首先我们在pom文件中引入spring-cloud-starter-bus-amqp的依赖,如果你使用的是Kafka,则引入spring-cloud-starter-bus-kafka。

需要注意,这里由于版本冲突,2.1.1.RELEASE在集成bus时会报错,将book-server项目的SpringBoot版本设置为Spring Boot2.0.6.RELEASE

需要动态刷新的支持,则要使用@RefreshScope注解,这里示例我仅仅刷新了ConfigApi类中的ip属性,所以只加在了ConfigApi类上,如果需要全部配置文件支持刷新,则可以直接加到核心启动类上。

最后依然是我们的配置文件了,Bus的配置主要包括消息队列的配置以及Bus刷新的开启。

配置完成后,我们依次启动eureka-server、config-server,book-server。

都启动成功后,我们访问http://localhost:10850/book-server-dev.yml能展示配置文件的信息,其中redis项的ip为localhost-new,然后使用swagger-ui调用接口,同样可以发现获取的ip为localhost-new。

现在我们更改配置文件,将ip项改为localhost,然后提交到git上。更新我们再访问http://localhost:10850/book-server-dev.yml,这是发现配置文件中redis.ip已经展示为localhost,但是你调用http://localhost:10830/config/redis接口时,返回值依旧还是localhost-new,表明应用中的配置状态并没有重新读取。

难道我们需要重启环境吗?既然是动态刷新,那显然是No,Spring Cloud Bus为我们提供了post的/actuator/bus-refresh接口用于刷新配置文件,所以我们只需要调用http://localhost:10830/actuator/bus-refresh,配置文件中的信息将会重新得到加载,可以看到控制台有以下输出。

再次请求http://localhost:10830/config/redis,可以看到返回值已经更新,ip变成了localhost,表明配置进行了重新加载,刷新成功。

源码地址: https://github.com/imyanger/springcloud-project/tree/master/p7-bus

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值