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

这篇具有很好参考价值的文章主要介绍了Spring Cloud学习笔记【消息总线-SpringCloud Bus】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringCloud Bus概述

概述

Spring Cloud Bus是Spring Cloud生态系统中的一个组件,用于实现微服务架构中的消息总线。它利用了轻量级消息代理(如RabbitMQ或Kafka)作为通信中间件,实现了在分布式系统中的消息传递和事件广播。

Spring Cloud Bus旨在简化微服务架构中的配置管理和状态同步。它允许将配置更改或状态更新广播到整个分布式系统中的各个微服务实例。通过使用消息总线,微服务可以轻松地获取最新的配置信息,并且能够了解其他微服务的状态变化。

作用

  • 配置的集中管理: Spring Cloud Bus与Spring Cloud Config(配置中心)集成,可以实现集中式的配置管理。当配置发生变化时,只需更新配置中心的配置,Spring Cloud Bus会将新的配置信息广播给所有订阅了消息总线的微服务。

  • 快速的配置更新: 通过使用消息总线,配置的更新可以迅速传播到整个分布式系统中的所有微服务实例,而无需每个微服务都主动去拉取配置。这样可以减少配置更新的延迟,提高系统的响应速度。

  • 系统状态的同步: Spring Cloud Bus不仅可以用于配置的更新,还可以用于系统状态的同步。当一个微服务的状态发生变化时,它可以通过消息总线广播给其他微服务,从而实现微服务之间的状态同步。

  • 可扩展的消息传递: Spring Cloud Bus提供了灵活的扩展机制,可以与其他Spring Cloud组件无缝集成。例如,可以与Spring Cloud Stream(消息驱动的微服务)集成,实现更高级的消息传递模式。

Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记

基本原理

Spring Cloud Bus的原理是基于消息代理和事件广播机制。

  • 消息代理: Spring Cloud Bus使用轻量级消息代理(如RabbitMQ或Kafka)作为通信中间件。消息代理负责接收和分发消息,并确保消息的可靠传递。微服务通过连接到消息代理,可以发送和接收消息。

  • 事件广播: 当一个微服务的配置发生变化或状态发生改变时,它会将这些变化作为消息发送到消息代理。消息代理将这些消息广播给所有订阅了消息总线的微服务。这样,其他微服务就能够接收到这些变化,并及时做出相应的响应。

安装RabbitMQ

  • *安装Erlang
    下载地址:http://erlang.org/download/otp_win64_21.3.exe,下载完成后点击安装即可。
  • 安装RabbitMQ
    下载地址:https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.14/rabbitmq-server-3.7.14.exe​​​​​,下载完成后点击安装。

安装RabbitMQ后进入sbin目录下
Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记
执行命令rabbitmq-plugins enable rabbitmq_management
启动mq,如下图就启动成功
Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记
访问地址http://localhost:15672/ 如下图
Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记
账号密码都为,guest
Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记

Demo配置

新建模块cloud-config-client-3366

Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记

pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

bootstrap.yml

server:
  port: 3366

spring:
  application:
    name: config-client
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: config #配置文件名称
      profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
      uri: http://localhost:3344 #配置中心地址

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

#服务注册到eureka地址
eureka:
  instance:
    # 配置eureka的状态显示
    hostname: localhost
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
  client: #服务提供者provider注册进eureka服务列表内
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka

启动类

@EnableEurekaClient
@SpringBootApplication
public class ConfigClientMain3366 {

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientMain3366.class, args);
    }

}

controller

@RestController
@RefreshScope //Spring Cloud 提供的用于动态刷新配置的注解,会在调用 /actuator/refresh 接口时重新加载配置并更新 configInfo 的值。
public class ConfigClientController {

    @Value("${spring.cloud.config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}

配置中心3344添加消息总线支持

pom.xml

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

bootstrap.yml

##rabbitmq相关配置,暴露bus刷新配置的端点
management:
  endpoints: #暴露bus刷新配置的端点
    web:
      exposure:
        include: 'bus-refresh'

客户端3355,3366添加消息总线支持

pom.xml

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

bootstrap.yml修改后

server:
  port: 3355

spring:
  application:
    name: config-client
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: config #配置文件名称
      profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
      uri: http://localhost:3344 #配置中心地址
  #rabbitmq相关配置 15672是Web管理界面的端口;5672是MQ访问的端口
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

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

#服务注册到eureka地址
eureka:
  instance:
    # 配置eureka的状态显示
    hostname: localhost
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
  client: #服务提供者provider注册进eureka服务列表内
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka

测试

修改gitee上的配置,config info version由2改为3提交

Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记

发送POST请求来触发刷新

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

Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记

查看客户端结果

3355和3366均已成功更新
Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记
Spring Cloud学习笔记【消息总线-SpringCloud Bus】,spring cloud,学习,笔记

动态刷新定点通知

不想全部通知,只想定点通知:只通知3355,不通知3366

简单一句话:指定具体某一个实例生效而不是全部

公式:http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}

案例:

我们这里以刷新运行在3355端口上的config-client为例:只通知3355,不通知3366文章来源地址https://www.toymoban.com/news/detail-706379.html

http://localhost:3344/actuator/bus-refresh/config-client:3355

到了这里,关于Spring Cloud学习笔记【消息总线-SpringCloud Bus】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud学习6(Spring Cloud Alibaba)断路器Sentinel熔断降级

    SpringCloud、SpringCloudAlibaba、SpringBoot版本选择。为了避免各种千奇百怪的bug,我们还是采用官方推荐的毕业版本。 修改tomcat配置最大线程数 引入测试依赖 编写测试代码 这里同时我们在浏览器去请求该地址,响应会变得很慢 测试结论:此时会发现由于thread接口囤积大量请求,

    2023年04月08日
    浏览(42)
  • Spring Cloud【Config客户端配置与测试、Config客户端之动态刷新 、什么是Spring Cloud Bus、Docker安装RabbitMQ】(十)

      目录 分布式配置中心_Config客户端配置与测试 为什么要引入bootstrap 

    2024年02月15日
    浏览(29)
  • config: 分布式配置中心 & bus: 消息总线

    每一个应用程序在运行时都需要相应的yml配置,分布式架构下多个服务器和应用服务面临着多个配置文件,在修改和发布上难度较大,需要有一个管理中心来统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题 流程: 分布式配置中心去远程仓库将创建好的yml文件

    2023年04月23日
    浏览(34)
  • Spring Cloud学习笔记:Eureka简介,Eureka简单样例

    这是本人学习的总结,主要学习资料如下 - 马士兵教育 Eureka 是 SpringCloud Nexflix 的核心子模块,其中包含 Server 和 Client 。 Server 提供服务注册,存储所有可用服务节点。 Client 用于简化和 Server 的通讯复杂度。 下面是 Eureka 的简单架构图 每一个服务节点需要在 Eureka Server 中注册

    2024年04月16日
    浏览(31)
  • Spring Cloud学习笔记(Ribbon):Ribbon的应用样例

    这是本人学习的总结,主要学习资料如下 - 马士兵教育 我们都知道 Ribbon 是用于负载均衡的。提供同一种服务的 Client 可能有多个,比如有多个 User Client 提供查询用户信息的服务,使用 Ribbon 就能简单地达到负载均衡的效果。 想要使用 Ribbon ,无论是服务提供者还是调用服务

    2024年04月25日
    浏览(25)
  • 微服务SpringCloud教程——Spring Cloud是什么

    Spring Cloud 是一款基于 Spring Boot 实现的微服务框架。Spring Cloud 源自 Spring 社区,主要由 Pivotal 和 Netflix 两大公司提供技术迭代和维护。 随着微服务的火爆流行,国内外各大互联网公司都相继分享了他们在微服务架构中,针对不同场景出现的各种问题的解决方案和开源框架。

    2024年02月15日
    浏览(37)
  • 《Spring Cloud学习笔记:Nacos配置管理 & OpenFeign & LoadBalancer & Getway》

    基于Feign的声明式远程调用(代码更优雅),用它来去代替我们之前的RestTemplate方式的远程调用 首先我们来看一下,微服务架构下关于配置文件的一些问题: 配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不

    2024年02月04日
    浏览(37)
  • 【springcloud 微服务】Spring Cloud Alibaba Nacos使用详解

    目录 一、前言 二、nacos介绍 2.1  什么是 Nacos 2.2 nacos 核心能力 2.2.1 服务发现和服务健康监测

    2024年01月22日
    浏览(41)
  • 【springcloud 微服务】Spring Cloud Alibaba整合Sentinel详解

    目录 一、前言 二、环境准备 2.1 部署sentinel管控台 2.1.1 官网下载sentinel的jar包 2.1.2 启动控制台

    2023年04月09日
    浏览(38)
  • 【springcloud 微服务】Spring Cloud Alibaba Sentinel使用详解

    目录 一、前言 二、分布式系统遇到的问题 2.1 服务可用性问题 2.1.1  单点故障

    2024年01月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包