Spring Cloud Bus 消息总线组件

Spring Cloud Bus 解决的问题
疑问:
当我们更新 GitHub 中的配置文件内容后, Config 客户端服务是否会及时更新的配置内容呢?
测试:
修改一下 GitHub microservice - config - product.yml 配置文件中 profile: dev ( 开发环境 ) 的数据库端口号,然后访问 http://localhost:8001/product/get/1 一样可以查询出数据,说明更新 GitHub 服务器中的配置并没有立刻更新到服务中,只有重启 Config 客户端服务才会读取新配置。
解决:
如果希望在不重启微服务的情况下更新配置如何来实现呢 ? 我们使用 Spring Cloud Bus 来实现置的自动更新。
Spring Cloud Bus 使用机制
Spring Cloud Bus 被国内很多都翻译为消息总线。大家可以将它理解为管理和传播所有分布式项目中的消息即可,其实本质是利用了MQ 的广播机制在分布式的系统中传播消息,目前常用的 Kafka RabbitMQ 。利用 Bus 的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一,我们用一张图来描述Bus 在配置中心使用的机制。
根据此图我们可以看出利用 Spring Cloud Bus 做配置更新的步骤 :
1 、提交配置后发送 post 方式的 /bus-refresh 请求给 Config 客户端
2 Config 客户端接收到请求从 Server 端更新配置并且发送消息给消息总线
3 、消息总线接到消息并通知给其它客户端
4 、其它客户端接收到通知,请求 Server 端获取最新配置
5 、全部客户端均获取到最新的配置
Spring Cloud Bus 实战
Postman 测试工具安装
Postman 是款强大网页调试的 windows 客户端工具,提供功能强大的 Web API & HTTP 请求调试。软件功能
非常强大,界面简洁明晰、操作方便快捷,设计得 很人性化。 Postman 中文版能够发送任何类型的 HTTP
(GET, DELETE, POST, PUT..) , 附带任何数量的请求参数。
Postman 安装包在课程资料中已提供:
参考资料 \Postman 测试工具 \Postman - win64 - 6.0.10 - Setup.exe
安装:双击 Postman - win64 - 6.0.10 - Setup.exe 就会自动安装,桌面就会有一个 Postman 图标
注册账号
采用的是 RabbitMQ 消息队列进行传播消息,所以需要安装 RabbitMQ
配置 Config 客户端
修改 microservice-cloud-14-product-config-8001 工程的 pom.xml 文件,添加依赖:
bootstrap.properties 中添加配置内容
microservice-cloud-14-product-config-8001 bootstrap.properties 配置文件新增 RabbitMQ 配置以及消息总线配置
添加配置
完整配置 :
功能测试
          首先启动Config 服务端: microservice-cloud-11-config-server-5001
         依次启动Eureka服务端: microservice-cloud-13-eureka-config-6001
        最后启动Product 提供者服务: microservice-cloud-14-product-config-8001
        访问Eureka 管理页面 : http://eureka6001.com:6001/ 显示服务名是 microservice-product-config
        修改GitHub 上的 microservice - config - product.yml 配置文件,将 profile: dev ( 开发环境 ) 的 服务名 改为 microservice-product-config-bus
访问 Eureka 管理页面 : http://eureka6001.com:6001/ 查看效果依然还是 microservice-product-config
使用 postman 工具发送 POST 请求 : http://localhost:8001/actuator/bus-refresh 发送请求后,会向 rabbitmq 队列发送数据,就会被监听到进行更新服务配置信息
再次访问 http://eureka6001.com:6001/ ,发现服务名变为 microservice-product-config-bus
自定义类中读取配置实战
         修改 GitHub 上的配置
              修改 GitHub 上的 microservice - config - product.yml 配置文件,增加自定义配置信息:
获取配置信息
microservice-cloud-14-product-config-8001 中的 ProductController 类中获取配置
功能实现与测试
     重新运行 microservice-cloud-14-product-config-8001
     访问 http://localhost:8001/hello 可以获取配置信息
     修改 GitHub 上的 microservice - config - product.yml 配置文件信息:
         使用 postman 工具发送 POST 请求 : http://localhost:8001/actuator/bus-refresh
        访问 http://localhost:8001/hello 发现并没有更新配置信息
是因为需要在 ProductController 上添加 @RefreshScope 注解 ,用于刷新配置
添加后重新上述测试
总结 :如果需要在自定义类中获取更新配置内容 , 则需要在此类上添加 @RefreshScope 才会获得更新的内容
刷新 Druid 数据源配置实战
前言
        先访问 http://localhost:8001/product/get/1 ,发现当前获取了 springcloud_db01 库的数据
        修改 GitHub 上的 microservice - config - product.yml 配置文件,将 profile: dev ( 开发环境 ) 的 库名改为 springcloud_db 02
        使用 postman 工具发送 POST 请求 : http://localhost:8001/actuator/bus-refresh
        访问 http://localhost:8001/product/get/1 ,发现依然是 springcloud_db01 库的数据 , 发现并没有刷新配置。
如果数据源采用的是 Druid ,目前更新 GitHub 中的数据源配置,只有重启服务才能获取新配置,不然获取不到。
10.5.2 自定义 Druid 配置类
microservice-cloud-14-product-config-8001 工程中创建 DruidConfig 配置类
在方法上添加 @RefreshScope 刷新数据源
功能测试
        首先启动 Config 服务端: microservice-cloud-11-config-server-5001
        依次启动 Eureka 服务端: microservice-cloud-13-eureka-config-6001
        最后启动 Product 提供者服务: microservice-cloud-14-product-config-8001
        访问 http://localhost:8001/product/get/1 ,发现当前获取了 springcloud_db01 库的数据
        修改 GitHub 上的 microservice - config - product.yml 配置文件, profile: dev ( 开发环境 ) 的 库名 改为 springcloud_db 02
使用 postman 工具发送 POST 请求 : http://localhost:8001/actuator/bus-refresh
  访问 http://localhost:8001/product/get/1 ,已经变为 springcloud_db02 库的数据
总结:发送 post 请求刷新后,服务器不用重启,新的数据源就会生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA代码搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值