Spring Cloud系列(七):消息总线
在上一篇中,当一个配置中心的客户端启动之后,它所引用的值就无法改变了,但是Spring Cloud 提供了一种手段去解决了这个问题——Spring Cloud Bus。
一、Spring Cloud Bus
先贴出官方文档对消息总线的介绍
Spring Cloud Bus links the nodes of a distributed system with a lightweight message broker. This broker can then be used to broadcast state changes (such as configuration changes) or other management instructions. A key idea is that the bus is like a distributed actuator for a Spring Boot application that is scaled out. However, it can also be used as a communication channel between apps.
内容来源于:https://cloud.spring.io/spring-cloud-bus/reference/html/
大概意思就是Spring Cloud Bus通过一个轻量级的消息代理来连接分布式系统的节点,这个代理可以被用作广播状态的改变(如配置变化)或其他消息指令。其核心思想是通过分布式的启动器对Spring Boot应用进行扩展。它还可以用作应用之间的通讯通道。
Spring Cloud Bus依靠消息队列来发送消息,常用是有RabbitMQ和Kafka,这里我们只介绍RabbitMQ的方式。
二、安装RabbitMQ
RabbitMQ依赖ErLang,如果你的机器还没有安装ErLang需要先安装,或者在安装RanbbitMQ时也会先检查本地的ErLang环境,如果没有即会引导你去安装。在windows上这两个都是傻瓜式安装,这里就不再多说,可以自行搜索教程。安装完成后会自己作为服务启动。

三、添加依赖
我们依然使用之前的项目,在config-client中添加bus的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
四、修改配置
在config-server的application.properties中添加以下配置
management.endpoints.web.exposure.include=bus-refresh
在config-client的application.properties中添加以下配置
management.endpoints.web.exposure.include=bus-refresh
在config-client的bootstrap.properties中添加以下配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
继续在config-client中的Controller类加上@RefreshScope注解。
五、启动和测试
启动注册中心、config-server和config-client,我们先访问http://localhost:8001/getFoo,这时返回的值是bar;
接着我们把远程仓库的foo值改为barrrrr,然后访问http://localhost:8001/actuator/bus-refresh进行刷新,但是如果直接在浏览器访问会报异常
There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'GET' not supported
因为actuator的这个端点不支持GET方法,这时我们可以用curl命令发送POST请求
curl http://localhost:8001/actuator/bus-refresh -X POST
这时在服务的控制台会输出这个日志
Received remote refresh request. Keys refreshed [config.client.version, foo]
再次访问http://localhost:8001/getFoo可以看到返回的值变成了barrrrr。
这是一个客户端的情况,我们也可以通过参数destination来刷新指定的服务,如http://localhost:8001/actuator/bus-refresh?destination=service-id:*就是刷新所有应用名为service-id的服务,不论ip和端口。
六、总结
消息总线的使用就介绍到这里。
源码已经上传到github:https://github.com/spareyaya/spring-cloud-demo/tree/master/chapter7
Spring Cloud系列(七):消息总线的更多相关文章
- spring cloud 系列第8篇 —— config+bus 分布式配置中心与配置热刷新 (F版本)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.config 简介 spring cloud config 分为服务端 ...
- Spring Cloud 系列之 Stream 消息驱动(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Stream 消息驱动(一) 本篇文章讲解 Stream 如何实现消息分组和消息分区. 消息分组 如果有多个消息消费者 ...
- Spring Cloud(七):配置中心(Git 版与动态刷新)【Finchley 版】
Spring Cloud(七):配置中心(Git 版与动态刷新)[Finchley 版] 发表于 2018-04-19 | 更新于 2018-04-24 | Spring Cloud Confi ...
- Spring Cloud系列(二) 介绍
Spring Cloud系列(一) 介绍 Spring Cloud是基于Spring Boot实现的微服务架构开发工具.它为微服务架构中涉及的配置管理.服务治理.断路器.智能路由.微代理.控制总线.全 ...
- Spring Cloud 系列之 Consul 配置中心
前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...
- Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...
- Spring Cloud 系列之 Spring Cloud Stream
Spring Cloud Stream 是消息中间件组件,它集成了 kafka 和 rabbitmq .本篇文章以 Rabbit MQ 为消息中间件系统为基础,介绍 Spring Cloud Stre ...
- Spring Cloud 系列之 Sleuth 链路追踪(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Sleuth 链路追踪(一) 本篇文章讲解 Sleuth 基于 Zipkin 存储链路追踪数据至 MySQL,Elas ...
- spring cloud系列教程第一篇-介绍
spring cloud系列教程第一篇-介绍 前言: 现在Java招聘中最常见的是会微服务开发,微服务已经在国内火了几年了,而且也成了趋势了.那么,微服务只是指spring boot吗?当然不是了,微 ...
随机推荐
- Windows Server系统加固
目录 账户管理.认证授权 管理账户 管理口令 授权 审核策略 IP协议安全配置 设备其他配置操作 账户管理.认证授权 管理账户 说明: 对于管理员账号,要求更改缺省账户名称,并且禁用 guest (来 ...
- POJ3422简单费用流
题意: 给一个n*n的矩阵,从左上角走到右下角,的最大收益,可以走k次,每个格子的价值只能取一次,但是可以走多次. 思路: 比较简单的一个费用流题目,直接拆点,拆开的点之间连接两 ...
- Windows核心编程笔记之错误处理
0x01 GetLastError() 函数用于获取上一个操作的错误代码 #include <Windows.h> #include <iostream> using name ...
- Windows PE资源表编程(枚举资源树)
资源枚举 写一个例子,枚举一个PE文件的资源表.首先说下资源相关的作为铺垫. 1.资源类型也是PE可选头中数据目录的一种.位于第三个类型. 2.资源目录分为三层.第四层是描述文件相关的.这些结构是按照 ...
- nodejs-函数&路由
函数------------------------------------------------------------ 基本函数 function say(word) { console.log ...
- 记一次CTF的签到题
开篇 打开题目网站 首先看到的是一个人博客,功能点非常少,功能较多的页面就是留言板了 一开始没啥思路,就想着抓包能不能找到SQL注入无果,在这个地方卡了很久 柳暗花明 在乱点的时候,无意中发现题目中的 ...
- 老J的技术分享之总结
老J做IT这块有二十多个年头了,算是中国IT的见证者与参与者.那个时候刚开始接触和了解时,对于他的一些建议,我不是很乐于去接受,因为我觉得他的那一套技术体系不是很适合如今的情况,当时间久了后发现,他对 ...
- GDI编程基础
窗口和视口 视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等). 在默认的映射模式下,视口是与窗口等同的.但是如果改变其映射模式,则其对应的单 ...
- Flume 常用配置项
注:以下配置项均为常见配置项,查询详细配置项可以访问 flume 官网 Source 常见配置项 Avro Source 配置项名称 默认值 描述 Channel – type – 组件类型名称,必须 ...
- 使用 parted 命令可以查看系统采用什么类型的分区表 gpt/mbr/msdos/ext/ext/ext2/ext3/ext4
Linux磁盘表示方式 Linux以字母标识磁盘的个数 a:第一块 b:第二块 Linux用数字标识分区:1-4标识主分区或扩展分区 逻辑分区从5开始 例如:sda.sda1.sda2 低级格式化 ...