十七、Bus消息总线

news2024/11/27 22:35:07

目录

1、Bus消息总线介绍:

2、使用消息总线实现配置自动更新

2.1、方案一架构图:

2.2、方案二架构图(常用)

3、对springcloud-config-server项目进行改造

3.1、修改springcloud-config-server项目的pom文件,添加消息总线支持和监控模块

3.2、修改yml配置,添加RabbitMQ配置和消息总线刷新端点

4、对springcloud-config-client项目进行改造

4.1、修改springcloud-config-server项目的pom文件,添加消息总线支持

4.2、修改yml配置,添加RabbitMQ配置

4.3、RabbitMQ Server\rabbitmq_server-3.7.9\sbin\rabbitmq-server.bat启动RabbitMQ服务器

4.4、启动config-server一台、启动config-client两台,并注册到同一个注册中心

4.5、 修改远程配置后使用postman手动发送post请求,主动刷新config-server端项目


1、Bus消息总线介绍:

在微服务框架中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线。

SpringCloud中也有对应的解决方案,SpringCloud Bus将分布式的节点用轻量级的消息代理连接起来,可以很容易搭建消息总线,配合SpringCloud config实现微服务应用配置信息的动态实时更新。

消息总线其实是通过消息中间件主题模式,它使用广播消息的机制被所有在注册中心的微服务实例进行监听和消费,以广播形式将消息推送给所有注册中心服务列表。

消息总线框架底层是MQ实现的,引入相应的jar包,底层框架实现好了,每个服务里面引入了相应的jar包后,自动创建队列绑定交换机等等,现成的有:ActiveMQ、Kafka、RabbitMQ、RocketMQ

2、使用消息总线实现配置自动更新

2.1、方案一架构图:

当远程仓库配置信息内容被修改后,只需要通知一个config client发送post请求/bus/refresh,然后该消息就会通过消息总线被其他的config client消费,而不需要每个config client去发送post请求获取最新配置信息

缺点:不可靠,如果当前接收post请求的config-client宕机或其他原因下线,而消息没有放到bus总线中,则其他的config-client则无法获取到配置中心最新的配置信息

2.2、方案二架构图(常用)

区别方案一,post请求发送到config-server中,由config-server将同步消息发送到bus总线中,config-client接收到消息后进行同步从而更新配置中心最新的配置信息

基于方案二,使用消息总线实现配置自动更新的方式是在配置config-server和config-client项目pom文件时添加springcloud bus模块和相应的MQ模块

3、对springcloud-config-server项目进行改造

3.1、修改springcloud-config-server项目的pom文件,添加消息总线支持和监控模块

<!--引入spring监控组件-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!--引入RabbitMQ的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

3.2、修改yml配置,添加RabbitMQ配置和消息总线刷新端点

server:
  port: 9021

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          #git的仓库地址
          uri: https://gitee.com/xxx/configuration.git
          #文件路径
          search-paths: config
          #username
          #password
  #配置RabbitMQ
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

#消息总线刷新端点
management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"

eureka:
  instance:
    # 使用ip地址作为host,而不是机器号/电脑名称
    prefer-ip-address: true
    #    Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
    lease-renewal-interval-in-seconds: 1
    #    Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
    #    超时将剔出该微服务,也可以在Eureka服务端进行设置
    lease-expiration-duration-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8060/eureka/

4、对springcloud-config-client项目进行改造

4.1、修改springcloud-config-server项目的pom文件,添加消息总线支持

<!--引入RabbitMQ的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

4.2、修改yml配置,添加RabbitMQ配置

server:
  port: 9022

spring:
  application:
    name: config-client
  cloud:
    config:
      #分支,默认master
      label: master
      #配置文件名称
      name: application
      #文件名后缀(application-dev.yml)
      profile: dev
      discovery:
        #开启从注册中心获取服务
        enabled: true
        #指定配置中心的服务名称
        service-id: config-server
    #配置RabbitMQ
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

eureka:
  instance:
    # 使用ip地址作为host,而不是机器号/电脑名称
    prefer-ip-address: true
    #    Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
    lease-renewal-interval-in-seconds: 1
    #    Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
    #    超时将剔出该微服务,也可以在Eureka服务端进行设置
    lease-expiration-duration-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8060/eureka/

#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

4.3、RabbitMQ Server\rabbitmq_server-3.7.9\sbin\rabbitmq-server.bat启动RabbitMQ服务器

访问RabbitMQ 的管理界面如下

 4.4、启动config-server一台、启动config-client两台,并注册到同一个注册中心

4.5、 修改远程配置后使用postman手动发送post请求,主动刷新config-server端项目

http://localhost:9021/actuator/bus-refresh

 一开始我们修改远程配置信息时client端无法获取更新后的数据信息,而server端是可以实时更新的,但是当我们发送post请求后/actuator/bus-refresh到server端后,在RabbitMQ可以看到springcloud Bus总线消息的写入与读出,然后重新刷新client端都可以获取更新后的数据

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

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

相关文章

如何防范鱼叉式网络钓鱼及其他钓鱼攻击

在当今日益互联的世界中&#xff0c;远程访问已成为许多组织允许员工随时随地办公的必要条件。远程访问是一把双刃剑&#xff0c;有自身的优势&#xff0c;但也带来了重大的安全风险。网络犯罪分子一直想方设法利用远程访问系统的漏洞&#xff0c;试图通过这些漏洞发起鱼叉式网…

软件测试行业对新人友好吗?

软件测试真的算是对新人小白非常友好的学科了&#xff0c;但是你也千万不要抱有幻想&#xff0c;觉得轻轻松松就能掌握真正的技能&#xff0c;然后如愿找到高薪工作。从0到1还是需要一个过程的&#xff0c;也是需要你付出相当大的努力去学习的 随着人工智能时代的到来&#xf…

第01讲:RocketMQ入门

一、什么是消息队列 ​ 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题。实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境&#x…

【C++进阶3-二叉搜索树】强,但没貌似还不够?

今天&#xff0c;带来二叉搜索树的讲解。 文中不足错漏之处望请斧正&#xff01; 是什么 二叉搜索树&#xff08;Binary Search Tree&#xff09;又称二叉排序树。 它可以是一棵空树&#xff0c;也可以是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所…

《花雕学AI》不用花钱,也能和ChatGPT聊天!快来看看这五个免费客户端吧

引言 你有没有想过和一个智能的聊天机器人对话&#xff1f;一个可以陪你聊天、讲故事、写代码、模仿名人、生成歌词等等的聊天机器人&#xff1f;如果你有这样的想法&#xff0c;那么你一定要了解ChatGPT。ChatGPT是一个由OpenAI开发的人工智能聊天机器人程序&#xff0c;它使用…

基于Ajax+JSon的表格数据浏览【简单版--没连接数据库】+【连接数据库版】

目录 基于AjaxJSon的表格数据浏览【简单版--没连接数据库】 代码&#xff1a; ajax.js ch10_4.jsp student.java Query.java 运行结果&#xff1a; 点击获取表格后&#xff1a; 基于AjaxJSon的表格数据浏览【简单版--没连接数据库】 代码&#xff1a; ajax.js //声明XM…

【案例实战】SpringBoot3.x自定义封装starter实战

1.starter背景简介及作用 &#xff08;1&#xff09;什么是starter starter是SpringBoot中的一个新发明&#xff0c;它有效的下降了项目开发过程的复杂程度&#xff0c;对于简化开发操做有着很是好的效果。 starter的理念&#xff1a;starter会把全部用到的依赖都给包含进来&a…

三极管的几点应用

三极管有三个工作状态&#xff1a;截止、放大、饱和&#xff0c;放大状态很有学问也很复杂&#xff0c;多用于集成芯片&#xff0c;比如运放&#xff0c;现在不讨论。其实&#xff0c;对信号的放大&#xff0c;我们通常用运放处理&#xff0c;三极管更多的是当做一个开关管来使…

微信小程序入门05-用户登录注册接口开发

用户登录注册&#xff0c;我们先需要开发后端的接口&#xff0c;接口一般需要有入参&#xff0c;然后和数据库进行交互。 1 创建表 我们现在先实现用户的登录及注册&#xff0c;建表语句 create database diancan; use diancan; CREATE TABLE users (id INT AUTO_INCREMENT …

软件设计模式介绍与入门

目录 1、软件设计模式的起源 2、什么是设计模式&#xff1f; 2.1、设计模式的设计意图 2.2、设计模式的分类准则 3、为什么要学习设计模式 4、如何学习设计模式 5、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#x…

毕业论文写作技巧

毕业论文的组成部分目录自定义目录 摘要&#xff08;Abstract&#xff09;绪论相关工作&#xff08;Related work&#xff09;研究方法和结果&#xff08;Method and Results&#xff09;研究方法研究结果 结论&#xff08;Conclusion&#xff09; 写好一篇论文其实就是讲好一个…

批量查询域名历史软件-域名历史快照查询工具

批量查询域名历史和域名历史快照 批量查询域名历史和域名历史快照是一种可以为您提供有关域名历史信息的工具&#xff0c;以下是该主题的详细介绍。 什么是域名历史&#xff1f; 域名历史记录是指域名在被注册前或过去的使用期间所经历的所有事件的记录。这些事件可能包括域…

SpringBoot拦截器获取Request的body数据

1. 场景 自定义Token后&#xff0c;需要在拦截器中进行token验证。在验证的过程中需要读取HttpServletRequest的body部分数据进行验证。 2. 存在问题 如果直接配置拦截器进行urlPatterns拦截&#xff0c;并进行参数验证&#xff0c;在拦截器中获取request的输入流&#xff0c…

智能防盗防偷门锁语音方案设计

智能锁主要功能 防撬报警功能&#xff08;非必须&#xff0c;但很实用&#xff09;&#xff1a;防撬报警功能可以说是指纹密码锁功能中对提升家居安全有效的功能之一。当指纹锁受到外暴力破坏时&#xff0c;就会自动发出警报声&#xff0c;提醒小区安保。好一点的甚至可以自动…

【AUTOSAR】【以太网】UdpNM

目录 一、概述 二、限制与约束 三、功能说明 3.1 协调算法 3.2 操作模式 3.2.1 Network Mode 3.2.2 准备总线睡眠模式 3.2.3 准备总线睡眠模式 3.3 网络状态 3.4 初始化 3.5 通信调度 3.5.1 NM消息发送 3.5.2 NM消息接收 3.6 其他功能 3.7 帧结构 四、API接口 …

创新案例 | 肆拾玖坊白酒0到20亿增长是传销还是创新

01.背景介绍 中国证券报引用公开数据显示&#xff0c;2016年&#xff0c;规模以上白酒企业数量为1578家&#xff0c;2021年&#xff0c;这一数字下降到965家。 同时&#xff0c;白酒产能逐年向优势产区集中&#xff0c;头部企业市场占有率不断提高。2021年&#xff0c;茅台、…

性能测试-操作和优化分析

打流工具 iperf 测试吞吐率 服务端&#xff1a;iperf -u -s 客户端&#xff1a;iperf -u -c 1.1.1.1 -b 500M -t 10 测试结果 ------------------------------------------------------------ Client connecting to 192.168.56.106, UDP port 5001 Sending 1470 byte d…

全面监测健康数据,更实用的健康手表,dido E55S Pro上手

关心健康的朋友&#xff0c;一般都特别关注自己的各项健康数据&#xff0c;会通过智能手表之类的工具来持续检测。现在健康类的智能手表选择很多&#xff0c;功能也很丰富&#xff0c;像是我现在用的这款dido E55S Pro&#xff0c;除了常规的心率、血氧之外&#xff0c;还检测心…

vector【实现】:迭代器失效以及非法的间接寻址、深拷贝中的浅拷贝。

vector模拟实现_云的小站的博客-CSDN博客 目录 主题&#xff1a; 迭代器失效 Insert导致的迭代器失效 ereas导致的迭代器失效 非法的间接寻址 深拷贝中的浅拷贝。 主题&#xff1a; 1&#xff09;迭代器失效 2&#xff09;非法的间接寻址 3&#xff09;深拷贝中的浅拷…

2023年最佳SleekFlow最佳替代品

建立更强大的对话关系的最佳平台是什么&#xff1f;现如今&#xff0c;国内客服集成与营销自动化工具也有非常多&#xff0c;比如SaleSmartly&#xff08;ss客服&#xff09;&#xff0c;被称为SleekFlow的最佳替代品。了解为什么SaleSmartly是SleekFlow的最佳替代品。在这篇文…