【spring cloud】(六)消息总线——springcloud Bus

在这里插入图片描述

  各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛

💡Bus知识点速览

  • 🍹 springcloud Bus
    • 🍸 什么是springcloud Bus?
      • 🍷 什么是消息总线?
      • 🍷 Bus实现自动刷新的原理
  • 🍹 RabbitMQ的下载配置
    • 🍸 Erlang
    • 🍸 RabbitMQ
  • 🍹 Bus动态刷新
    • 🍸 全局广播通知代码实现
    • 🍸 定点通知代码实现

🍹 springcloud Bus

🍸 什么是springcloud Bus?

  上一章的springcloud Bus是对分布式微服务的远程配置,但是有一个遗留的问题就是,Config客户端对远程配置的刷新需要手动使用post请求来完成,这就使得Config客户端动态刷新变得十分麻烦。于是消息总线springcloud Bus就是来解决这个问题的

🍷 什么是消息总线?

  在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都链接上来。由于该主题中产生的消息都会被所有实例监听和消费,所以称它为消息总线。

🍷 Bus实现自动刷新的原理

  所有的Config客户端都监听MQ中同一个topic(默认是SpringCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其他监听同一Topic的服务就能得到通知,然后去更新自身的配置。
  由于springcloud Bus支持两种消息的代理(RabbitMQ和kafka),于是接下来的demo选择使用RabbitMQ 3.7.14,其他的消息中间件Bus暂不支持

🍹 RabbitMQ的下载配置

🍸 Erlang

  第一步: 下载安装Erlang,地址:http://erlang.org/download/otp_win64_21.3.exe,安装除了自定义安装路径外,一路next即可
  第二步: 配置环境变量,新建一个环境变量命名为ERLANG_HOME,值为Erlang的安装路径在这里插入图片描述
path环境中添加 %ERLANG_HOME%\bin
在这里插入图片描述
  第三步: win + R 输入cmd回车,键入命令erl测试配置是否成功在这里插入图片描述

🍸 RabbitMQ

  第一步: 这里以RabbitMQ 3.7.14为例,地址:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.14,页面的最下方有下载的地方,安装除了自定义安装路径外,一路next即可在这里插入图片描述
  第二步: 配置环境变量,新建一个环境变量命名为RABBITMQ_SERVER,值为RabbitMQ的安装路径在这里插入图片描述
path环境中添加 %RABBITMQ_SERVER%\sbin在这里插入图片描述
  第三步: 安装管理工具RabbitMQ-Plugins,win + R 输入cmd回车,键入命令

rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述
  第四步: 第三部安装的管理工具会安装几个RabbitMQ的管理快捷方式,可以点击win键查看,点击即可执行对应操作在这里插入图片描述
  第五步: 测试是否安装成功,浏览器http://localhost:15672(默认账号:guest,密码:guest),登入RabbitMQ的管理页就表示已经安装成功

🍹 Bus动态刷新

  Bus动态刷新有两种设计思想,第一种利用消息总线触发一个客户端的bus/refresh,从而刷新这条总线上的所有客户端配置;第二种利用消息总线触发一个服务端ConfigServer的bus/refresh,从而刷新这个配置中心(服务端)上注册的所有客户端配置。
  以上两种思想并不是都有应用,而是选择了第二种,因为第一种设计思想会使得被选中的服务端节点在配置获取职责之外新增配置刷新的职责,这会打破微服务的职责单一性和各节点之间的对等性。且一旦被选中的节点失效,配置刷新也将会随之失效,这条总线上的服务端依旧无法实时获取到最新的配置。

🍸 全局广播通知代码实现

  此时配置相关微服务一共有三个,它们是配置中心服务端3344、客户端3355、客户端3366,全局广播的代码实现需要对三个微服务都进行配置
  配置中心3344: pom文件和配置文件

<!--添加消息总线RabbitMQ支持-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
spring:#rabbitmq相关配置rabbitmq:host: localhostport: 5672username: guestpassword: guest##rabbitmq相关配置,暴露bus刷新配置的端点 SpringCloud Bus动态刷新全局广播
management:endpoints: #暴露bus刷新配置的端点web:exposure:include: 'bus-refresh'

  客户端3355、3366: pom文件和配置文件

<!--添加消息总线RabbitMQ支持-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
spring:#rabbitmq相关配置rabbitmq:host: localhostport: 5672username: guestpassword: guest

以3366为例,配置文件的缩进如下

server:port: 3366spring:application:name: config-clientcloud:config:uri: http://localhost:3344  #配置中心的地址label: master  #分支名称name: config  #配置文件名称profile: dev  #读取后缀名称   上述三个综合http://localhost:3344/master/config-dev.yml#rabbitmq相关配置rabbitmq:host: localhostport: 5672username: guestpassword: guest
#服务注册到eureka地址
eureka:client:service-url:#设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址defaultZone: http://localhost:7001/eureka #单机版# 暴露监控端点 否则 curl -X POST "http://localhost:3355/actuator/refresh" 不可使用
management:endpoints:web:exposure:include: "*"

  🚩值得注意的是,之前rabbitmq的web访问端口是15672,但是在代码中连接rabbitmq使用的端口是5672,这里很容易踩坑

  完成前面的配置,使用以下链接访问配置中心服务端3344、客户端3355、客户端3366的配置信息

http://localhost:3344/master/config-dev.yml
http://localhost:3355/configInfo
http://localhost:3366/configInfo

  然后修改gitee上的远程配置,仍然使用上面链接访问,会发现只有配置中心服务端获取的配置是最新的,但是配置客户端的配置还是修改前的,需要使用win+R输入命令刷新,再访问的话配置客户端就是最新的配置了

curl -X POST "http://localhost:3344/actuator/bus-refresh"

在这里插入图片描述

🍸 定点通知代码实现

  bus除了可以一个命令刷新总线上的所有微服务之外,还可以支持定点刷新,命令如下

定点通知一个

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

定点通知多个

curl -X POST "http://localhost:3344/actuator/bus-refresh/{config-client:3355,config-client:3366}"

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

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

相关文章

kali 切换root权限_Ubuntu 被曝严重漏洞:切换系统语言 + 输入几行命令,就能获取 root 权限...

公众号关注 “GitHubDaily”设为 “星标”&#xff0c;带你了解技术圈内新鲜事&#xff01;来自量子位无需系统密码&#xff0c;就能添加新的 sudo 用户、获取 root 权限&#xff0c;事后还能删除不留痕迹。这是 GitHub 安全研究员 Kevin Backhouse 发现的一个 Ubuntu 系统大漏…

oracle定义变量sql赋值_ORACLE获取SQL绑定变量值的方法总结

本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法&#xff0c;在SQL优化调优过程中&#xff0c;经常会用到这方面的知识点。在此梳理、总结一下这方面的知识点&#xff0c;方面日后查找、翻阅。方法1&#xff1a;查询V$SQLV$SQL视图中的BIND_DATA字段用来存储绑定变量的…

transition css_Transition 过渡

1&#xff1a;基本概念在一定时间内平滑的过渡&#xff0c;也就是圆滑的以动画效果改变css的属性值。它的过渡可以由鼠标点击、焦点获取或者失去、被点击事件或对元素的改变中触发&#xff1b;不能主动触发&#xff0c;只能被动触发。常用的基本属性有&#xff1a;Transition-d…

jdbc mysql分页_JDBC【数据库连接池、DbUtils框架、分页】

1.数据库连接池什么是数据库连接池简单来说&#xff1a;数据库连接池就是提供连接的。。。为什么我们要使用数据库连接池数据库的连接的建立和关闭是非常消耗资源的频繁地打开、关闭连接造成系统性能低下编写连接池编写连接池需实现java.sql.DataSource接口创建批量的Connectio…

python读写文件操作_详解Python文件读写操作

读文件 打开文件&#xff08;文件需要存在&#xff09;#打开文件 f open("data.txt","r") #设置文件对象 print(f)#文件句柄 f.close() #关闭文件 #为了方便&#xff0c;避免忘记close掉这个文件对象&#xff0c;可以用下面这种方式替代 with open(data.t…

【cloud Alibaba】(三)流量控制、熔断降级(下)——Sentinel

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的spring cloud专栏&#xff0c;在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f4a1;Sen…

python gui入门的例子_Python GUI编程之Tkinter入门之道

相信刚学习使用Python进行GUI编程的时候&#xff0c;肯定都会听过Tkinter&#xff0c;毕竟是standard Python interface to the Tk GUI toolkit.用来写一些小程序还是很方便的。但如果是刚接触GUI编程的话肯定是被官方文档搞的有些懵&#xff0c;毕竟还没弄清楚套路。之前使用过…

@async 默认线程池_SpringBoot 线程池的使用

Java大联盟帮助万千Java学习者持续成长关注作者&#xff5c;Musclehengblog.csdn.net/Muscleheng/article/details/81409672前言最近在做订单模块&#xff0c;用户购买服务类产品之后&#xff0c;需要进行预约&#xff0c;预约成功之后分别给商家和用户发送提醒短信。考虑发短信…

mysql 横向扩展 中间件_mysql-proxy数据库中间件架构 | 架构师之路

一、mysql-proxy简介mysql-proxy是mysql官方提供的mysql中间件服务&#xff0c;上游可接入若干个mysql-client&#xff0c;后端可连接若干个mysql-server。它使用mysql协议&#xff0c;任何使用mysql-client的上游无需修改任何代码&#xff0c;即可迁移至mysql-proxy上。mysql-…

python selenium对象怎么序列化_python selenium爬取斗鱼

不加延迟报错selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:”xpath”,”selector”:”.//span[class”DyListCover-hot”]”}(Session info: chrome80.0.3987.122)最开始以为是版本问题&#xff0c;不…

神经网络的全连接层_深度神经网络全连接层

一、概念全连接层一般在网络的最后部分做分类输出&#xff0c;全连接层的有m个输入和n个输出&#xff0c;每一个输出都和所有的输入相连&#xff0c;相连的权重w都是不一样的&#xff0c;同时每一个输出还有一个bias。二、前向全连接假设输入是4&#xff0c;输出是4&#xff0c…

vs 选定内容没有属性页_从智能单品,到全屋智能:2019中国智能家居发展白皮书【附82页PPT】...

2019年&#xff0c;智能家居行业在技术、市场和行业的变革中迎接新的挑战和机遇。一方面&#xff0c;AI、IoT、边缘计算全面赋能智能家居&#xff1b;另一方面&#xff0c;中国的房地产行业正在从上半场的“增量开发”&#xff0c;切换到下半场的“存量经营”、“楼盘精装化”政…

python决策树的应用_机器学习-决策树实战应用

1.下载2.安装&#xff1a;双击3.创建桌面快捷方式安装目录\bin文件夹\&#xff1a;找到gvedit.exe文件右键 发送到桌面快捷方式&#xff0c;如下图&#xff1a;4.配置环境变量将graphviz安装目录下的bin文件夹添加到Path环境变量中&#xff1a;5.验证是否安装并配置成功进入win…

【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题

写在前面&#xff1a;​ 本人是在学习B站黑马程序员SSM框架教程视频的时候在P37集遇到了问题&#xff0c;如果不解决还没办法往下接着听&#xff0c;老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题&#xff0c;全在这篇博客中得到了解决 &#x1f622;解决上…

python人脸识别源码_Python 抖音机器人,让你找到漂亮小姐姐

本项目作者沉迷于抖音无法自拔&#xff0c;常常花好几个小时在抖音漂亮小姐姐身上。本着高效、直接地找到漂亮小姐姐的核心思想&#xff0c;我用 Python ADB 做了一个 Python 抖音机器人 Douyin-Bot。特性自动翻页颜值检测人脸识别自动点赞自动关注随机防 Ban自动评论原理打开…

thinkphp josn mysql_ThinkPHP:JSON字段类型的使用(ORM)

ThinkPHP5.1版本正式发布已经有一段时间了&#xff0c;我会陆续给大家介绍其中的新特性。今天要给大家介绍的是一个可能很多用户还不了解的一个特性&#xff1a;JSON字段数据支持。不过首先注意一点&#xff0c;本篇内容中描述的JSON字段数据的支持是从V5.1.4版本引入的。由于包…

获取http地址如何从上面抓取图片_用 Python 自动抓取妹子图

目录前言Media Pipeline启用Media Pipeline使用 ImgPipeline抓取妹子图瞎比比与送书后话前言我们在抓取数据的过程中&#xff0c;除了要抓取文本数据之外&#xff0c;当然也会有抓取图片的需求。那我们的 scrapy 能爬取图片吗&#xff1f;答案是&#xff0c;当然的。说来惭愧&a…

错误代码0x800f0950怎么解决_解决win10安装net framework 3.5失败(错误代码 0x800F0950)...

视频教程&#xff1a;Win10教程 安装net framework 3.5失败(错误代码 0x800F0950)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com一&#xff1a;出现问题&#xff1a;报错代码二&#xff1a;解决步骤1.通过命令提示符明确自己系统版本Windows键X ,打开&#xff08;命…

python 日志不会按照日期分割_django实现日志按日期分割

settings文件中配置&#xff1a; LOGGING { version:1, disable_existing_logger:False, formatters:{ verbose:{ format:%(asctime)s \"%(pathname)s&#xff1a;%(module)s:%(funcName)s:%(lineno)d\" [%(levelname)s]-%(message)s }, }, # 处理器 handlers:{ # 输…

exe打包工具哪个最好_一键分发工具哪个最好用?这款30万人都在用,很优秀!...

现代化媒体对于传播越来越重要&#xff0c;16年到如今&#xff0c;视频内容产业实在有话题度&#xff0c;其高效的粉丝互动机制、低资金投入高额回报等等亮点&#xff0c;强烈吸引着数以百万计的创造者&#xff0c;为了达到极其出色的阅读量&#xff0c;这些人往往会运用到所有…