Springcloud-Bus部分学习笔记
视频学习地址:https://www.bilibili.com/video/BV18E411x7eT
源码地址:https://gitee.com/zhu_xinmiao/springcloud
spring cloud版本:H版
概述
Bus是什么
Bus的作用
实际上就是原先Config动态刷新中,我们人工输入的curl刷新提醒,有中间件替我们完成了。
什么是总线
相当于我有一个微信公众号,大家订阅了我,我这一更新大家每个人都能收到这个更新。
如果学过消息队列(RabbitMQ、Kafka…)的话,这就相当于消息队列的广播模型。
设计思想
1对应的是Bus是什么标题下的图
相当于小道消息的广播通知
2对应的是Bus的作用标题下的图
相当于*配置中心的广播通知
技术选型时我们更应该选择后者
实现
前期准备
这里使用的消息队列是RabbitMQ,并且选用的是设计思想中的第二种方法。
新建3366微服务,和3355搭建过程几乎完全相同,可参考我前一篇博文config部分学习笔记中的搭建过程。
这里唯一的区别是controller中有所不同,但和核心逻辑没有关联,只是为了和3355做一个输出的区分。
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${server.port}")
private String serverPort;
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String configInfo(){
return "serverPort: " +serverPort+ "\t\n\n configInfo: "+ configInfo;
}
}
搭建总线支持(全局广播)
改pom
这三个微服务的pom文件中都加上
<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
改yml
三个微服务中都加上,这个是spring下面一级的,一定要对齐,不懂的话可以看下我gitee中的源码。
#spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
在3344的yml中额外加上
#暴露Bus刷新端点
management:
endpoints:
web:
exposure:
include: "bus-refresh"
这里强调一下,也算是解释。但凡暴露端点的操作pom依赖中都要带上以下依赖,同时bus-refresh是actuator中的操作。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
测试
测试时千万记得打开RabbitMQ,不然3355和3366会跑不起来。
和上一篇config部分学习笔记类似,更改gitee中版本号后会发现3344刷新后直接更新了,而3355和3366没有更新。
与上一篇不同的是,这次我们不是单独去给3355,3366分别post,而是直接给3344发一个post请求,来做到一处刷新,处处刷新。
curl -X POST "http://localhost:3344/actuator/bus-refresh"
刷新测试页面后我们就可以看到,3355和3366的版本号也更新了。
更新前:
更新后:
定点通知
这里我们测试只通知3366,不通知3355
3366更新前:
输入curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3366"。
这里config-client来自yml中的这里
3366则是端口号,组合起来就是destination中需要填的内容。
更新后:
推荐阅读
-
MVC使用Spring.Net应用IOC(依赖倒置)学习笔记3
-
MVC使用极验验证制作登录验证码学习笔记7
-
MVC使用Controller代替Filter完成登录验证(Session校验)学习笔记5
-
MVC使用Memcache+Cookie解决分布式系统共享登录状态学习笔记6
-
MVC项目结构搭建及单个类的实现学习笔记1
-
Java语言Consistent Hash算法学习笔记(代码示例)
-
Java语言Consistent Hash算法学习笔记(代码示例)
-
canvas学习笔记之绘制简单路径
-
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
-
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定