视频学习地址:https://www.bilibili.com/video/BV18E411x7eT
源码地址:https://gitee.com/zhu_xinmiao/springcloud
spring cloud版本:H版
概述
Bus是什么
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Pjr8iu9-1596947161962)(image-20200809095106025.png)]](https://i-blog.csdnimg.cn/blog_migrate/0e2f249e2c8b6d11c85d0fbf2af72b82.png)
Bus的作用
实际上就是原先Config动态刷新中,我们人工输入的curl刷新提醒,有中间件替我们完成了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SmaNjTts-1596947161966)(image-20200809095016052.png)]](https://i-blog.csdnimg.cn/blog_migrate/957a514dc6a8f2c9bee9e619205d800a.png)
什么是总线
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jv3bHdBY-1596947161969)(image-20200809095310414.png)]](https://i-blog.csdnimg.cn/blog_migrate/4f69060e644da841212574b758a8defe.png)
相当于我有一个微信公众号,大家订阅了我,我这一更新大家每个人都能收到这个更新。
如果学过消息队列(RabbitMQ、Kafka…)的话,这就相当于消息队列的广播模型。
设计思想
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5mNJonN6-1596947161972)(image-20200809101809801.png)]](https://i-blog.csdnimg.cn/blog_migrate/16f14421bfebabe3e847d14d08d1fc26.png)
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;
}
}
搭建总线支持(全局广播)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NnKvF8Lc-1596947161974)(image-20200809102834411.png)]](https://i-blog.csdnimg.cn/blog_migrate/a42a446982234f5744b6900c7975a5ad.png)
改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的版本号也更新了。
更新前:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkPesJCK-1596947161976)(image-20200809120932973.png)]](https://i-blog.csdnimg.cn/blog_migrate/c29eac46111dc96e809481df9b6daf3c.png)
更新后:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42wqYdqP-1596947161977)(image-20200809121029676.png)]](https://i-blog.csdnimg.cn/blog_migrate/1a39d8295ebdd2bf0b79ca34d6161862.png)
定点通知
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6MApHfQI-1596947161978)(image-20200809121327260.png)]](https://i-blog.csdnimg.cn/blog_migrate/c6f0884dccc7f0bd9075bcc097f38d0b.png)
这里我们测试只通知3366,不通知3355
3366更新前:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NI4Wc73d-1596947161979)(image-20200809121603495.png)]](https://i-blog.csdnimg.cn/blog_migrate/de758b04925c402a2483586dfc6c1c92.png)
输入curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3366"。
这里config-client来自yml中的这里
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-esX6Bngn-1596947161981)(image-20200809121823263.png)]](https://i-blog.csdnimg.cn/blog_migrate/cb97e8d12c1bf020fba063ab20fe8cf3.png)
3366则是端口号,组合起来就是destination中需要填的内容。
更新后:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ju7hafxm-1596947161982)(image-20200809121908007.png)]](https://i-blog.csdnimg.cn/blog_migrate/5efc9c2a843e90e3e1d9163e5bd008c9.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zq3f8wxV-1596947161983)(image-20200809121919363.png)]](https://i-blog.csdnimg.cn/blog_migrate/0fd6da54f30b1c5569444f026175aa0b.png)
627

被折叠的 条评论
为什么被折叠?



