2019独角兽企业重金招聘Python工程师标准>>>

上一节的统一配置中心《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,我们还需要启用它的管理插件

D:\Develop\RabbitMQServer\rabbitmq_server-3.6.9\sbin>rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:amqp_clientcowlibcowboyrabbitmq_web_dispatchrabbitmq_management_agentrabbitmq_managementApplying 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.* 的配置,如下所示
spring:rabbitmq:host: 127.0.0.1port: 5672        # 注意端口是5672,不是15672username: xuanyupassword: 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:**

转载于:https://my.oschina.net/wuweixiang/blog/3025220

SpringCloud系列第09节之消息总线Bus相关推荐

  1. SpringCloud教程-消息总线Bus 客户端(client)刷新(SpringCloud版本Greenwich.SR4)

    文章目录 消息总线(Bus)介绍 项目示例 config-client-bus 代码地址:github-spring-cloud地址 前言:前面文章讲了Spring Cloud Config配置中心如 ...

  2. SpringCloud config 配置中心集群配置以及整合消息总线BUS实现关联微服务配置自动刷新

    一.SpringCloud Config 基本配置中的问题 在上一章节<SpringCloud config 配置中心介绍与基本配置使用>中我们现实了配置中心的配置集中管理.调用微服务应用 ...

  3. java技术--SpringCloud:消息总线Bus简介及代码实现(18)

    1.消息总线Bus简介 (1)消息总线Bus的作用<1>在没有使用消息总线的时候,如果需要修改某个配置1.1.如果涉及修改的微服务节点比较多,需要手动的逐个节点的刷新非常麻烦1.2.在微服 ...

  4. 499、Java分布式和集群12 -【SpringCloud视图微服务 - 消息总线Bus】 2021.06.01

    目录 0.RabbitMQ 1.先运行,看到效果,再学习 2.pom.xml 3.bootstrap.yml 4.application.yml 5.ProductDataServiceApplica ...

  5. springcloud(九):配置中心和消息总线(配置中心终结版)

    我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...

  6. SpringCloud消息总线——Bus

    Bus 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 在SpringCloud Config学习过程中,还遗留下来一个问题:当运维更新git上的配置信息时,要想更改所有的 ...

  7. SpringCloud教程-消息总线Bus 服务端(server)刷新(SpringCloud版本Greenwich.SR4)

    文章目录 项目示例 config-server-bug 代码地址:github-spring-cloud地址 前言:本篇文章在上一篇文章基础上进行修改,因为虽然我们做到了利用一个消息总线触发刷新,而刷 ...

  8. iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置

    技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...

  9. 多项目如何高效协同合作 | springcloud系列之bus消息总线

    前言 在springcloud config章节中我们完成了配种中心的搭建,以及通过配置中心完成配置的抽离通过springcloud config模块我们将配置抽离到git仓库中我们不必要每次为了改配 ...

  10. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

最新文章

  1. linux服务器没网情况下手动安装软件几个方法
  2. Microsoft Windows Workflow Foundation 入门:开发人员演练
  3. 获得最新纪录 sql
  4. python3基础3--数据类型--数据运算--表达式if -else-while-for
  5. python 判断时间是否大于6点_python中判断时间间隔的问题
  6. Tableau Desktop
  7. python介绍---python工作笔记008
  8. elementui上传图片加参数_Vue + Element UI使用富文本编辑器
  9. MFC中的CRect(区域)
  10. matplotlib 可视化 —— 移动坐标轴(中心位置)
  11. Python数据分析入门(十九):绘制散点图
  12. u盘遭受蠕虫 特洛伊木马攻击文件隐藏的解决办法
  13. 佳博打印机打印条码和二维码的方法
  14. 迅雷,暴风影音,QQ这些软件是什么工具和语言编的?
  15. 车牌识别系统 HY-LPR2
  16. 关于电子科技大学大学生早自习情况调查
  17. 新颖的_基于web的毕业设计题目50例
  18. Opencv识别面部
  19. 设计模式 -- 组合模式(Composite)
  20. python模块 之 xlwt模块

热门文章

  1. 数据结构 http://www.cnblogs.com/sun-haiyu/p/7704654.html
  2. Iperf性能测试的问题小结
  3. linux下启动tomcat出现“This file is needed to run this program ”
  4. oracle spfile和pfile文件(转)
  5. Hive启动报错: Found class jline.Terminal, but interfac
  6. 【ML】PAC learning model
  7. 可空类型 (C# 编程指南)
  8. 重复insmod同一个模块导致段错误
  9. 编译DPDK遇到make: *** /lib/modules/3.10.0-693.el7.x86_64/build: no such file or dirortory
  10. 实现透明防火墙的必备知识-Bridge Filter半景