SpingCloud 2020微服务教程【40】Bus动态刷新全局广播、定点广播

视频链接:2020最新版SpringCloud框架开发教程-周阳
文章源码:https://github.com/geyiwei-suzhou/cloud2020/

为了演示广播效果,仿照 SpingCloud 2020微服务教程【36】配置中心之客户端配置 中cloud-config-client-3355模块,新建cloud-config-client-3366(只有端口号区别)

全局广播设计思想:

  1. 利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
    Spring Cloud Bus
  2. 利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置
    消息总线

方案二更适合做全局广播,原因:

  • 方案一打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担刷新的职责
  • 破坏了微服务各节点的对等性
  • 有一定的局限性。例如,微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就会增加更多的修改

cloud-config-center-3344模块

改pom:配置中心服务端添加消息总线支持

<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

写yml:在spring节点下添加如下子节点

# rabbitmq相关配置
rabbitmq:
  host: localhost
  port: 5672
  usrname: guest
  password: guest

添加暴露bus刷新配置的端点

# 暴露bus刷新配置的端点
management:
  endpoints: # 暴露bus刷新配置的端点
    web:
      exposure:
        include: 'bus-refresh'

cloud-config-client-3355、cloud-config-client-3366模块

改pom:配置中心客户端添加消息总线支持

<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

写yml:在spring节点下添加如下子节点

# rabbitmq相关配置
rabbitmq:
  host: localhost
  port: 5672
  usrname: guest
  password: guest

添加暴露bus刷新配置的端点

# 暴露bus刷新配置的端点
management:
  endpoints: # 暴露bus刷新配置的端点
    web:
      exposure:
        include: 'bus-refresh'

启动:启动:cloud-config-center-3344,cloud-config-client-3355,cloud-config-client-3366 三个模块

访问:http://config-3344.com:3344/config-dev.ymlhttp://localhost:3355/configInfohttp://localhost:3366/configInfo
然后修改github上config-dev.yml配置文件中的version,刷新 http://config-3344.com:3344/config-dev.yml,发现版本号已经改变, 但 http://localhost:3355/configInfohttp://localhost:3366/configInfo 还是旧的版本号

这是我们执行一下如下命令:

curl -X POST "http://localhost:3344/actuator/bus-refresh"

然后再访问 http://localhost:3355/configInfohttp://localhost:3366/configInfo 发现成功通知到各个子模块

访问:http://localhost:15672/#/exchanges 发现Exchanges中出现springCloudBus主题

上面完成了全局广播,现在我们想实现定点通知

/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数指定需要更新配置的服务或实例

http://ip:port/actuator/bus-refresh/{destination}

destination:服务名:端口号

如通知cloud-config-client-3355模块,不通知cloud-config-client-3366模块,则使用如下命令:

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值