SpringCloud学习笔记 - 消息总线 - Spring Cloud Bus

news2024/10/6 10:28:06

1. 消息总线简介

消息代理中间件构建了一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有微服务实例监听和消费。

消息代理又是什么?消息代理是一个消息验证、传输、路由的架构模式,主要用来实现接收和分发消息,并根据设定好的消息处理流来转发给正确的应用。它在微服务之间起到通信调度作用,减少了服务之间的依赖。

什么是 Spring Cloud Bus
在这里插入图片描述

Spring Cloud Bus 是 Spring Cloud 体系内的消息总线,用来连接分布式系统的所有节点。

Spring Cloud Bus 将分布式的节点用轻量的消息代理(RibbitMQ、Kafka)连接起来。可以通过消息代理广播配置文件的更改,或服务之间的通讯,也可以用于监控。解决了微服务数据变更,及时同步的问题。

什么时候使用 Spring Cloud Bus

微服务一般都采用集群方式部署,而且在高并发下经常需要对服务进行扩容、缩容、上线、下线的操作。比如我们需要更新配置,又或者需要同时失效所有服务器上的某个缓存,需要向所有相关的服务器发送命令,此时就可以选择使用 Spring Cloud Bus 了。

总的来说,就是在我们需要把一个操作散发到所有后端相关服务器的时候,就可以选择使用 Spring Cloud Bus 了。

2. rabbitMQ环境配置

1. 安装ErIong

下载Windows安装包,并双击安装
https://www.erlang.org/downloads
在这里插入图片描述

安装完成后配置环境变量
在这里插入图片描述
在这里插入图片描述

使用cmd命令,输入 erl -version 验证:
在这里插入图片描述

2. 安装rabbitMQ

在RabbitMQ的gitHub项目中,下载window版本的服务端安装包。
https://www.rabbitmq.com/install-windows.html#installer
在这里插入图片描述
接着到双击安装,一直点下一步安装即可,安装完成后,找到安装目录:D:\Program Files\RabbitMQ Server\rabbitmq_server-3.10.6\sbin
在这里插入图片描述
在此目录下打开cmd命令,输入rabbitmq-plugins enable rabbitmq_management命令安装管理页面的插件:

然后双击rabbitmq-server.bat启动脚本,然后打开服务管理可以看到RabbitMQ正在运行:

这时,打开浏览器输入http://localhost:15672,账号密码默认是:guest/guest
在这里插入图片描述
到这一步,安装就大功告成了!
在这里插入图片描述

3. Bus动态刷新全局广播的设计思想和选型

演示广播效果,增加复杂度,再以3355为模板再制作一个3366微服务模块

  1. 新建cloud-config-client-3366
  2. 添加pom依赖
  3. 修改bootstrap.yaml
  4. 创建主启动类
  5. 编写业务类,简单起见只使用controller
@RestController
@RefreshScope
public class ConfigClientController {
    @Value("${server.port}")
    private String serverPort;
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/configInfo")
    public String configInfo(){
        return "serverPort: "+serverPort+"\t\n\n configInfo: "+configInfo;
    }
}

bus消息总线实现的两种设计思想

  1. 利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
    在这里插入图片描述

  2. 利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置
    在这里插入图片描述

图二的架构显然更加适合,图—不适合的原因如下:

  • 打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担配置刷新的职责。

  • 破坏了微服务各节点的对等性。

  • 有一定的局限性。例如,微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就会增加更多的修改。

4. Bus动态刷新全局广播配置实现

1. 给配置中心服务端(cloud-config-center-3344)添加消息总线支持

1. 引入消息总线rabbitMQ支持

<!--添加消息总线RabbitNQ支持-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2. 在yaml配置文件中添加rabbitMQ相关配置

#rabbitmq相关配置
rabbitmq:
  host: localhost
  port: 5672
  username: guest
  password: guest
  
#rabbitmq相关配置,暴露bus刷新配置的端点
management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"

2. 给配置中心客户端(cloud-config-client-3355/3366)添加消息总线支持

1. 引入消息总线rabbitMQ支持

<!--添加消息总线RabbitNQ支持-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2. 在yaml配置文件中添加rabbitMQ相关配置

#rabbitmq相关配置
rabbitmq:
  host: localhost
  port: 5672
  username: guest
  password: guest

3. 测试配置修改及更新

  1. 启动7001(注册中心)、3344(配置中心-服务端)、3355(配置中心-客户端)、3366(配置中心-客户端)
  2. 修改配置文件信息,并发送POST刷新请求
curl -X POST "http://localhost:3344/actuator/bus-refresh"
  1. 获取信息,查看是否生效
  • 配置中心:http://config-3344.com:3344/config-dev.yml
  • 客户端:http://localhost:3355/configlnfo、http://localhost:3366/configInfo

广播通知,—次修改,处处生效

5. 动态刷新定点通知

不想全部通知,只想定点通知:只通知3355,不通知3366,指定具体某一个实例生效而不是全部

公式:http://localhost:port/actuator/bus-refresh/{destination}

localhost:配置中心-服务端的IP地址或域名
port:配置中心-服务端的端口号
destination:需要通知的目标服务(配置中心-客户端)${服务名-端口号}
例:curl -X POST http://localhost:3344/actuator/bus-refresh/{config-client:3355}" ,这样就只会通知3355客户端刷新配置。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java EE|进程与线程的区别与联系

大数据时代&#xff0c;数据规模非常庞大&#xff0c;所以我们在实际开发过程中&#xff0c;需要经常进行并发问题的处理。对于此问题&#xff0c;我们通常有两种解决方案&#xff1a;多进程方式和多线程方式。但是由于多进程对于资源的共享非常困难&#xff0c;而多线程并发可…

一个宁静祥和没有bug的下午和SqlSession的故事

作者&#xff1a;马跃 1 背景 这是一个安静祥和没有bug的下午。 作为一只菜鸡&#xff0c;时刻巩固一下基础还是很有必要的&#xff0c;如此的大好时机&#xff0c;就让我来学习学习mybatis如何使用。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(i…

模拟退火--学习笔记

模拟退火算法来源&#xff1a; 固体退火原理&#xff0c;将固体加温至充分高&#xff0c;再让其徐徐冷却&#xff0c;加温时&#xff0c;固体内部粒子随温升变为无序状&#xff0c;内能增大&#xff0c;而徐徐冷却时粒子渐趋有序&#xff0c;在每个温度都达到平衡态&#xff0c…

【图神经网络论文整理】(三)—— HOW TO FIND YOUR FRIENDLY NEIGHBORHOOD:SuperGAT

ICLR 2021Dongkwan Kim & Alice Oh论文地址 本文介绍的论文是《HOW TO FIND YOUR FRIENDLY NEIGHBORHOOD: GRAPH ATTENTION DESIGN WITH SELF-SUPERVISION》。 该篇论文提出了一个新的网络模型SuperGAT&#xff0c;目的是解决当图中存在噪声能够学习到更多的表达注意力&a…

实体店做微信商城小程序制作步骤_分享微信商城小程序的作用

各行各业都在用微商城小程序开店&#xff0c;不管是餐饮店还是便利店&#xff0c;还是五金店。都是可以利用微信小程序开一个线上店铺。实现线上跟线下店铺更加全面的结合。维护好自己的老客户。让您的客户给您拉新&#xff0c;带来新客户。 小程序经过这几年的快速发展和不断升…

计算机毕业设计之java+ssm企业销售管理系统

项目介绍 本企业销售管理系统主要包括系统用户管理模块、商品信息模块、进货入库管理、员工信息管理、销售管理、登录模块、和退出模块等多个模块系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统是独立的运行&#xff0c;不依附于其他系统&#xff0c…

Day4:写前端项目(html+css+js)

xiao效果&#xff1a; 页面布局 使用grid <div class"grid-container"><div><h1 class"uppercase ff-sans-cond letter-spacing-2 text-accent"> so, you want to travel to<span class"uppercase letter-spacing-2 fs-900 te…

【无线传感器】使用 Mamdani 模糊推理系统改进无线传感器网络路由和数据包传递(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

操作系统的奋斗(二)进程与线程

第二章 进程与线程2.1进程与线程2.1.1进程的概念、特征、状态与转换2.1.2进程的组织、控制、通信2.1.3进程和多线程模型2.2处理机调度2.2.1调度的概念、目标、实现2.2.2典型的调度算法2.2.3进程切换2.3同步与互斥2.3.1同步与互斥的基本概念2.3.2实现临界区互斥的基本办法2.3.3互…

泊松随机变量的分解与求和

1.泊松随机变量的分解 假设传感器发出的信号为0-1信号.发出1的概率为,发出0的概率为 ,并且和以前所发的信号独立.现在假设一定时间内发出信号的个数为泊松随机变量&#xff0c;其参数为, 可以证明在同一段时间内发出1的个数也是泊松随机变量&#xff0c;其参数为. 证明&#…

PTA题目 A除以B

真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B&#xff0c;要求你按照“A/B商”的格式输出结果。 输入格式&#xff1a; 输入在第一行给出两个整数A和B&#xff08;−100≤A,B≤100&#xff09;&#xff0c;数字间以空格分隔。 输出格式&#xff1a; 在一行中输出…

Data-Efficient Backdoor 论文笔记

#论文笔记# 1. 论文信息 论文名称Data-Efficient Backdoor作者Pengfei Xia 中国科学技术大学会议/出版社IJCAI 2022pdf&#x1f4c4;在线pdf代码&#x1f4bb;pytorch概要&#xff1a;本文是 backdoor attack 中的数据加毒。不同于以往随机在干净数据中选择样本加毒的方法&am…

磁盘怎么删除分区,磁盘管理怎么删除分区

为了高效地利用磁盘分区&#xff0c;会删除部分磁盘分区&#xff0c;但是很多的用户都不知道应该怎么删除磁盘分区&#xff0c;所以&#xff0c;易我小编将讲解磁盘怎么删除分区。 一、为什么要删除磁盘分区 因为不同用户的磁盘分区管理需求不同&#xff0c;为了适应用户的具体…

spring boot yaml自定义配置传入代码

目录 一、在项目代码中&#xff0c;直接读取配置文件application.yml中的数据 二、通过yaml配置文件&#xff0c;给类注入数据 一、在项目代码中&#xff0c;直接读取配置文件application.yml中的数据 使用Value注解。 如&#xff1a; 在spring boot 中&#xff0c;applica…

Spring实战之容器、上下文、Bean的生命周期

一、Spring容器 在基于Spring的应用中&#xff0c;你的应用对象生存于Spring容器&#xff08;container&#xff09;中&#xff0c;Spring容器负责创建对象&#xff0c;装配它们&#xff0c;配置它们并管理它们的整个生命周期&#xff0c;从生存到死亡。&#xff08;在这里&am…

程序运行只是单单的编译吗?一文让你深入理解程序运行的过程

前言&#xff1a; 写了这么长时间的c语言代码&#xff0c;我们都没有想过为什么要写头文件吗&#xff0c;而程序执行的过程又是如何呢&#xff1f;只有编译吗 &#xff1f;要知道机器只能读懂二进制但我们所写的代码编译器是如何读懂的呢&#xff1f;这一篇文章看后一定能解决以…

数据结构之Trie树

Trie树&#xff1a; Tire树可以较为高效的存储和查找字符串集合。 存储方式&#xff1a; 首先Trie有一个根节点&#xff0c;我们按从前往后的顺序将字符串的每个位置上的字符存储到树的每一层中&#xff0c;这样我们存储多个字符串时就可以消除一部分冗余&#xff0c;在查询字…

期货开户后需要银期转账绑定

一、期货公司正规性 如何判断期货公司是否正规&#xff1f; 1、 中国证监会官网有公布所有正规期货公司&#xff08;一共150家&#xff09;名录的&#xff0c;我们可以直接参考证监会发布链接&#xff1a;期货公司名录 2、如果你懒得从名录中一个个找&#xff0c;也可以直接…

一款不错的SpringCloud 脚手架项目

文章目录 I 一款不错的SpringCloud 脚手架项目1.1 项目概述1.2 本地启动II. Swagger RESTful 风格的 Web 服务框架2.1 组成部分2.2 springfoxIII 相关辅助脚本3.1 pod 辅助脚本3.2 git 辅助脚本I 一款不错的SpringCloud 脚手架项目 1.1 项目概述 springboot+springcloud注册中心…

基于SpringBoot的电子招标投标管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;HTML、Vue 数据库&#xff1a;MySQL5.7 数据库管理工具&#xff1a;Navicat 12 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否…