前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud系列第09节之消息总线Bus

SpringCloud系列第09节之消息总线Bus

作者头像
wuweixiang
发布2019-03-22 11:59:10
3920
发布2019-03-22 11:59:10
举报
文章被收录于专栏:吴伟祥吴伟祥

上一节的统一配置中心《SpringCloud系列第08节之配置中心Config》演示了属性热加载

其中提到,每次热加载属性时,都要逐次调用每个应用的 /refresh 接口(或者维护 Git 仓库的 Webhooks)来触发属性更新

随着系统的扩充,应用的增加,若所有的触发动作都要手工去做(或者维护 Git 仓库的 Webhooks),这是不人道的

所以我们希望配置中心的属性发生变化时,能有一种途径去通知所有的相关应用去自动刷新配置

而通过 Spring Cloud Bus 就能够实现以消息总线的方式,通知集群上的应用,去动态更新配置信息

本文是以 RabbitMQ 来作为消息代理的中间件(实现将消息路由到一个或多个目的地),所以要先安装 RabbitMQ

RabbitMQ的安装

RabbitMQ 是 AMQP(Advanced Message Queuing Protocol)协议的一个开源实现的产品

它是由以高性能、健壮、可伸缩性出名的 Erlang OTP 平台实现的工业级的消息队列服务器

所以在安装 RabbitMQ 之前,要先安装 Erlang,下面是它们的下载地址

http://erlang.org/download/otp_win64_19.3.exe

http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9.exe

Windows 下安装成功后,RabbitMQ Server 会自动注册为服务,并以默认配置启动

也可以在开始菜单,找到 RabbitMQ Server 目录,点击 RabbitMQ Service - start 来启动

RabbitMQ的管理

为了能在 Web 界面管理 RabbitMQ,我们还需要启用它的管理插件

代码语言:javascript
复制
D:\Develop\RabbitMQServer\rabbitmq_server-3.6.9\sbin>rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  amqp_client
  cowlib
  cowboy
  rabbitmq_web_dispatch
  rabbitmq_management_agent
  rabbitmq_management

Applying plugin configuration to rabbit@Jadyer-PC... started 6 plugins.

D:\Develop\RabbitMQServer\rabbitmq_server-3.6.9\sbin>

启用后,浏览器访问 http://127.0.0.1:15672/ 即可(登录的用户名密码均为 guest)

登录进去之后,可以在上方的 Admin 导航菜单中新建用户,并分配权限等等

示例代码

示例代码如下(也可以直接从 Github 下载:https://github.com/v5java/demo-cloud-09-bus

它是由四个模块组成的 Maven 工程,包含了一个注册中心、一个配置中心、两个读取了配置中心属性的服务提供方

它是在上一节的统一配置中心《SpringCloud系列第08节之配置中心Config》的代码基础上改的

由于改动不多,所以下面就只列出来各个改动点

注册中心

无修改

配置中心

  1. 引入依赖项spring-cloud-starter-bus-amqp
  2. application.yml 中添加 spring.rabbitmq.* 的配置,如下所示
代码语言:javascript
复制
spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672        # 注意端口是5672,不是15672
    username: xuanyu
    password: xuanyu

服务提供方

其改动部分与配置中心相同:都是引入依赖,添加 rabbitmq 配置,简单粗暴一步到位(Spring Cloud Bus 自动化配置的功劳)

验证

还是分别访问两个服务提供方暴露出来的接口

http://127.0.0.1:2100/demo/config/getHost

http://127.0.0.1:2200/demo/config/getHost

属性热加载时,需要调用消息总线的 /bus/refresh 接口,共有两种方式(都能使集群中其它节点动态刷新读取到的属性)

  1. 调用某个应用的接口:curl -X POST http://127.0.0.1:2100/bus/refresh
  2. 调用消息总线的接口:curl -X POST http://127.0.0.1:4100/bus/refresh

但在需要迁移某个使用了的节点时,就不得不修改 Git 仓库的 Webhooks

所以,为了使得各个微服务保持对等,故推荐第二种方式来刷新属性

另外,也可通过 destination 参数来指定刷新范围,举例如下

curl -X POST http://127.0.0.1:4100/bus/refresh?destination=demo.cloud.config:2200

curl -X POST http://127.0.0.1:4100/bus/refresh?destination=demo.cloud.config:**

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RabbitMQ的安装
  • RabbitMQ的管理
  • 示例代码
    • 注册中心
      • 配置中心
        • 服务提供方
        • 验证
        相关产品与服务
        微服务引擎 TSE
        微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档