Springcloud-Bus部分学习笔记


视频学习地址:https://www.bilibili.com/video/BV18E411x7eT
源码地址:https://gitee.com/zhu_xinmiao/springcloud
spring cloud版本:H版

概述

Bus是什么

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Pjr8iu9-1596947161962)(image-20200809095106025.png)]

Bus的作用

实际上就是原先Config动态刷新中,我们人工输入的curl刷新提醒,有中间件替我们完成了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SmaNjTts-1596947161966)(image-20200809095016052.png)]

什么是总线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jv3bHdBY-1596947161969)(image-20200809095310414.png)]

相当于我有一个微信公众号,大家订阅了我,我这一更新大家每个人都能收到这个更新。

如果学过消息队列(RabbitMQ、Kafka…)的话,这就相当于消息队列的广播模型。

设计思想

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5mNJonN6-1596947161972)(image-20200809101809801.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)]

改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)]

更新后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42wqYdqP-1596947161977)(image-20200809121029676.png)]

定点通知

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6MApHfQI-1596947161978)(image-20200809121327260.png)]

这里我们测试只通知3366,不通知3355

3366更新前:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NI4Wc73d-1596947161979)(image-20200809121603495.png)]

输入curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3366"。

这里config-client来自yml中的这里

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-esX6Bngn-1596947161981)(image-20200809121823263.png)]

3366则是端口号,组合起来就是destination中需要填的内容。

更新后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ju7hafxm-1596947161982)(image-20200809121908007.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zq3f8wxV-1596947161983)(image-20200809121919363.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值