前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >消息总线 —— Spring Cloud Bus

消息总线 —— Spring Cloud Bus

作者头像
名字是乱打的
发布2022-05-13 10:20:34
4110
发布2022-05-13 10:20:34
举报
文章被收录于专栏:软件工程
1 SpringCloudBus干啥的呢?

由我上一篇文章集中配置组件SpringCloudConfig

我们已经知道了配置文件可以在远端做一个便捷的统一管理,这比较方便我们去查看和修改

但是呢,如果我们更新码云中的配置文件,那客户端数据查的是未修改状态数据,证明修改服务器中的配置并没有更新立刻到工程,只有重新启动程序才会读取配置。 那我们如果想在不重启微服务的情况下更新配置如何来实现呢? 我们使用SpringCloudBus来实现配置的自动更新

代码实现 主要利用了springboot的监听和消息中间件(这里用的rabbitmq)
1. config服务端

(1)修改config统一配置文件管理微服务的pom.xml,引用消息总线和rabbit依赖

代码语言:javascript
复制
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

(2)修改application.yml ,添加配置

代码语言:javascript
复制
spring:
  rabbitmq:
    host: 192.144.144.144

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh //config里的消息总线配置
2 修改需要实时监听配置文件更新的微服务模块

我们还是以基础模块为例,加入消息总线

(1)修改base工程 ,引入依赖

这里发现导入bus模块时候与已有mysql版本冲突,具体的是mysql的drive无法识别,高版本的要求的driver不是com.mysql.jdbc.Driver,而我们使用的是dirver:com.mysql.jdbc.Driver,故为了防止引入jar包后由于我们没有指定mysql的版本号系统自动匹对更高版本的,所以我们这里特别引入了mysql的版本

代码语言:javascript
复制
      <dependency>  <!--rabbitmq-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

        <dependency><!-- springboot监听器 监听rabbitmq是否传入refresh-bus配置文件刷新-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency><!--消息总线bus-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
   <dependency> //bus版本冲突,这里特别引用了mysql版本
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

(2)在码云的配置文件中配置rabbitMQ的地址:

代码语言:javascript
复制
  rabbitmq:
    host: 192.144.144.144

(2)启动config模块 ,eureka模块和base模块 看是否正常运行

(3)修改码云上的配置文件 ,将数据库连接IP 改为127.0.0.1 ,在本地部署一份数据 库。

(4)postman测试 Url: http://127.0.0.1:12000/actuator/bus-refresh Method: post

(5)再次观察输出的数据是否是读取了本地的mysql数据。

这样就搞定了

注意:

我们上面自动刷新的配置信息仅限于框架自己的配置(比如数据库的链接地址)我们可以进行更新

如果我们在配置文件中定义了一些自己的自定义信息

比如:

代码语言:javascript
复制
yml文件中写
zyh: 177
我们在项目中定义
@value("${zyh}")
private String zyh;

这样搞的话,只能得到zyh的信息,如果我们在码云中修改,它是无法得到新的值的

如果们向得到新的值

需要在类上定义

代码语言:javascript
复制
@RefreshScope
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 SpringCloudBus干啥的呢?
  • 代码实现 主要利用了springboot的监听和消息中间件(这里用的rabbitmq)
    • 1. config服务端
      • 2 修改需要实时监听配置文件更新的微服务模块
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档