SpringCloud系列第09节之消息总线Bus
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》的代码基础上改的
由于改动不多,所以下面就只列出来各个改动点
注册中心
无修改
配置中心
- 引入依赖项spring-cloud-starter-bus-amqp
- 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
接口,共有两种方式(都能使集群中其它节点动态刷新读取到的属性)
- 调用某个应用的接口:
curl -X POST http://127.0.0.1:2100/bus/refresh
- 调用消息总线的接口:
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相关推荐
- SpringCloud教程-消息总线Bus 客户端(client)刷新(SpringCloud版本Greenwich.SR4)
文章目录 消息总线(Bus)介绍 项目示例 config-client-bus 代码地址:github-spring-cloud地址 前言:前面文章讲了Spring Cloud Config配置中心如 ...
- SpringCloud config 配置中心集群配置以及整合消息总线BUS实现关联微服务配置自动刷新
一.SpringCloud Config 基本配置中的问题 在上一章节<SpringCloud config 配置中心介绍与基本配置使用>中我们现实了配置中心的配置集中管理.调用微服务应用 ...
- java技术--SpringCloud:消息总线Bus简介及代码实现(18)
1.消息总线Bus简介 (1)消息总线Bus的作用<1>在没有使用消息总线的时候,如果需要修改某个配置1.1.如果涉及修改的微服务节点比较多,需要手动的逐个节点的刷新非常麻烦1.2.在微服 ...
- 499、Java分布式和集群12 -【SpringCloud视图微服务 - 消息总线Bus】 2021.06.01
目录 0.RabbitMQ 1.先运行,看到效果,再学习 2.pom.xml 3.bootstrap.yml 4.application.yml 5.ProductDataServiceApplica ...
- springcloud(九):配置中心和消息总线(配置中心终结版)
我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...
- SpringCloud消息总线——Bus
Bus 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 在SpringCloud Config学习过程中,还遗留下来一个问题:当运维更新git上的配置信息时,要想更改所有的 ...
- SpringCloud教程-消息总线Bus 服务端(server)刷新(SpringCloud版本Greenwich.SR4)
文章目录 项目示例 config-server-bug 代码地址:github-spring-cloud地址 前言:本篇文章在上一篇文章基础上进行修改,因为虽然我们做到了利用一个消息总线触发刷新,而刷 ...
- iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置
技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...
- 多项目如何高效协同合作 | springcloud系列之bus消息总线
前言 在springcloud config章节中我们完成了配种中心的搭建,以及通过配置中心完成配置的抽离通过springcloud config模块我们将配置抽离到git仓库中我们不必要每次为了改配 ...
- SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析
SpringCloud理论技术 概述 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...
最新文章
- linux服务器没网情况下手动安装软件几个方法
- Microsoft Windows Workflow Foundation 入门:开发人员演练
- 获得最新纪录 sql
- python3基础3--数据类型--数据运算--表达式if -else-while-for
- python 判断时间是否大于6点_python中判断时间间隔的问题
- Tableau Desktop
- python介绍---python工作笔记008
- elementui上传图片加参数_Vue + Element UI使用富文本编辑器
- MFC中的CRect(区域)
- matplotlib 可视化 —— 移动坐标轴(中心位置)
- Python数据分析入门(十九):绘制散点图
- u盘遭受蠕虫 特洛伊木马攻击文件隐藏的解决办法
- 佳博打印机打印条码和二维码的方法
- 迅雷,暴风影音,QQ这些软件是什么工具和语言编的?
- 车牌识别系统 HY-LPR2
- 关于电子科技大学大学生早自习情况调查
- 新颖的_基于web的毕业设计题目50例
- Opencv识别面部
- 设计模式 -- 组合模式(Composite)
- python模块 之 xlwt模块
热门文章
- 数据结构 http://www.cnblogs.com/sun-haiyu/p/7704654.html
- Iperf性能测试的问题小结
- linux下启动tomcat出现“This file is needed to run this program ”
- oracle spfile和pfile文件(转)
- Hive启动报错: Found class jline.Terminal, but interfac
- 【ML】PAC learning model
- 可空类型 (C# 编程指南)
- 重复insmod同一个模块导致段错误
- 编译DPDK遇到make: *** /lib/modules/3.10.0-693.el7.x86_64/build: no such file or dirortory
- 实现透明防火墙的必备知识-Bridge Filter半景