在上一篇中,当一个配置中心的客户端启动之后,它所引用的值就无法改变了,但是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系列(七):消息总线的更多相关文章

  1. spring cloud 系列第8篇 —— config+bus 分布式配置中心与配置热刷新 (F版本)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.config 简介 spring cloud config 分为服务端 ...

  2. Spring Cloud 系列之 Stream 消息驱动(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Stream 消息驱动(一) 本篇文章讲解 Stream 如何实现消息分组和消息分区. 消息分组 如果有多个消息消费者 ...

  3. Spring Cloud(七):配置中心(Git 版与动态刷新)【Finchley 版】

    Spring Cloud(七):配置中心(Git 版与动态刷新)[Finchley 版]  发表于 2018-04-19 |  更新于 2018-04-24 |  Spring Cloud Confi ...

  4. Spring Cloud系列(二) 介绍

    Spring Cloud系列(一) 介绍 Spring Cloud是基于Spring Boot实现的微服务架构开发工具.它为微服务架构中涉及的配置管理.服务治理.断路器.智能路由.微代理.控制总线.全 ...

  5. Spring Cloud 系列之 Consul 配置中心

    前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...

  6. Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

    Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...

  7. Spring Cloud 系列之 Spring Cloud Stream

    Spring Cloud Stream 是消息中间件组件,它集成了 kafka 和 rabbitmq .本篇文章以 Rabbit MQ 为消息中间件系统为基础,介绍 Spring Cloud Stre ...

  8. Spring Cloud 系列之 Sleuth 链路追踪(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Sleuth 链路追踪(一) 本篇文章讲解 Sleuth 基于 Zipkin 存储链路追踪数据至 MySQL,Elas ...

  9. spring cloud系列教程第一篇-介绍

    spring cloud系列教程第一篇-介绍 前言: 现在Java招聘中最常见的是会微服务开发,微服务已经在国内火了几年了,而且也成了趋势了.那么,微服务只是指spring boot吗?当然不是了,微 ...

随机推荐

  1. R3抹掉加载的DLL

    R3抹掉加载的DLL 原理类似于获取Kernel32.dll加载地址,知道这个东西也是在看获取Kernel32.dll地址的时候在网上搜索学习资料,无意中看到的这个东西.这个挺有用,结合着HiJack ...

  2. android之Tween Animation

    android Tween Animation有四种,AlphaAnimation(透明度动画).ScaleAnimation(尺寸伸缩动画).TranslateAnimation(位移动画).Rot ...

  3. 『政善治』Postman工具 — 10、Postman中对Cookie的操作

    目录 1.往常的Cookie处理方式 2.Postman中的Cookie管理机制 3.自定义Cookie管理内容 在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问 ...

  4. SAP ABAP ALV 颜色设置(两个ALV函数例子) 列 行 单元格

    @[TOC](设置ALV颜色)# 前言淦! 要求花花绿绿的ALV ,那就淦他! 需要的参数和对应颜色放在最后.稍微改改就能用. 介绍两个常用的ALV函数实现1.REUSE_ALV_GRID_DISPL ...

  5. 容器进阶:OCI与容器运行时

    Blog:博客园 个人 什么是容器运行时(Container Runtime) Kubernetes节点的底层由一个叫做容器运行时的软件进行支撑,它负责比如启停容器 这样的事情.最广为人知的容器运行时 ...

  6. stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用库函数使用GPIO引脚功能.   补充   本文章为多年前学习 ...

  7. SQLFlow的几种关系

    SQLFlow的几种关系 SQLFlow可以用来分析各种数据对象之间的依赖关系,其中包含了fdd, fdr, frd, join 四种关系 fdd:表示数据从源列到目标列的关系 frd:表示结果集返回 ...

  8. 适用于windows10 Linux子系统的安装管理配置 How To Management Windows Subsystem for Linux WSL

    什么是WSL Windows Subsystem for Linux 简称WLS,适用于Linux的Windows子系统,可以直接在Windows上运行Linux环境(包括大部分命令行工具) Linu ...

  9. Linux_配置认证访问FTP服务

    [RHEL8]-FTPserver:[Centos8]-FTPclient !!!测试环境我们首关闭防火墙和selinux(FTPserver和FTPclient都需要) [root@localhos ...

  10. linux初级之总结复习

    一.linux命令复习 1.ls:列出当前目录下的文件 -h: -l: -d: -a: 2. man: 命令帮助手册 3. cd: 切换目录 -:  ~: ..: cd: 4. pwd: 显示当前工作 ...