Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Cloud Bus在服务之间发送和接收消息示例

Spring Cloud Bus在服务之间发送和接收消息示例

原创
作者头像
堕落飞鸟
发布于 2023-04-15 05:06:16
发布于 2023-04-15 05:06:16
84000
代码可运行
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
运行总次数:0
代码可运行

下面是一个使用 Spring Cloud Bus 和 RabbitMQ 的完整示例。在此示例中,我们将创建两个服务:Config Service 和 Client Service。Config Service 负责存储应用程序的配置文件,Client Service 则使用这些配置文件来配置自身。

配置 Config Service

在 Config Service 中,我们需要将配置文件存储Git 存储库中,并启用 Spring Cloud Bus 和 RabbitMQ 支持。

首先,可以在 application.yml 文件中添加以下配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-git-repo/config-repo.git
  bus:
    enabled: true
    trace:
      enabled: true
    rabbit:
      enabled: true

在这个示例中,我们将 Config Service 配置为从 GitHub 存储库中加载应用程序的配置文件接下来,需要在 Config Service 中添加一个 REST 控制器,该控制器可以将 Spring Cloud Bus 消息发送到 RabbitMQ。可以使用以下代码来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class ConfigController {

    private final BusRefreshListener busRefreshListener;

    @Autowired
    public ConfigController(BusRefreshListener busRefreshListener) {
        this.busRefreshListener = busRefreshListener;
    }

    @PostMapping("/refresh")
    public void refresh() {
        busRefreshListener.refresh();
    }
}

在这个示例中,我们创建了一个 REST 控制器,该控制器将在 /refresh 路径上监听 POST 请求。当接收到该请求时,控制器将调用 BusRefreshListener bean 的 refresh() 方法,该方法将向 Spring Cloud Bus 发送一个刷新消息。

最后,我们需要在 Config Service 中添加一个 BusRefreshListener bean,该 bean 将在收到 Spring Cloud Bus 消息时触发配置文件的重新加载。可以使用以下代码来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class BusRefreshListener implements ApplicationListener<RefreshRemoteApplicationEvent> {

    private final ConfigurableApplicationContext context;

    @Autowired
    public BusRefreshListener(ConfigurableApplicationContext context) {
        this.context = context;
    }

    @Override
    public void onApplicationEvent(RefreshRemoteApplicationEvent event) {
        context.refresh();
    }

    public void refresh() {
        context.publishEvent(new RefreshRemoteApplicationEvent(this, "", ""));
    }
}

在这个示例中,我们创建了一个 BusRefreshListener bean,该 bean 实现了 ApplicationListener 接口,并在收到 RefreshRemoteApplicationEvent 事件时触发了应用程序上下文的刷新。我们还添加了一个 refresh() 方法,该方法将创建一个新的 RefreshRemoteApplicationEvent 事件,并将其发布到应用程序上下文中。

配置 Client Service

在 Client Service 中,我们需要添加一个依赖于 Config Service 的组件,并在收到 Spring Cloud Bus 消息时重新加载配置文件。

可以在 application.yml 文件中添加以下配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: client-service
  bus:
    enabled: true
    trace:
      enabled: true
    rabbit:
      enabled: true

在这个示例中,我们将 Client Service 配置为使用 Config Service 中存储的配置文件。我们还启用了 Spring Cloud Bus 和 RabbitMQ 支持。

最后,我们需要在 Client Service 中添加一个 RefreshScope bean,该 bean 将在收到 Spring Cloud Bus 消息时重新加载应用程序的配置文件。可以使用以下代码来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
@RefreshScope
public class ConfigComponent {

    @Value("${message:Hello World!}")
    private String message;

    public String getMessage() {
        return message;
    }
}

在这个示例中,我们创建了一个 ConfigComponent bean,该 bean 带有一个 @RefreshScope 注解,以便它可以在收到 Spring Cloud Bus 消息时重新加载。我们还将一个名为 message 的属性注入到该 bean 中,并在 getMessage() 方法中返回该属性的值。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Cloud Bus监听服务配置的变化并自动通知其他服务(二)
Spring Cloud Bus提供了一种自动通知服务配置变化的机制。当配置中心中的配置发生更改时,Spring Cloud Bus会自动通知应用程序,告诉它们需要重新加载最新的配置信息。这种机制可以大大简化应用程序的配置管理,并提高系统的可用性。
堕落飞鸟
2023/04/16
6470
史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)
方志朋
2017/12/29
7710
史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)
干货|Spring Cloud Bus 消息总线介绍
本期我们来了解下 Spring Cloud 体系中的另外一个组件 Spring Cloud Bus (建议先熟悉 Spring Cloud Stream,不然无法理解 Spring Cloud Bus 内部的代码)。
用户1516716
2019/07/10
1.2K0
配置 Spring Cloud Bus 的消息代理示例
接下来,我们以一个简单的示例来演示如何使用Spring Cloud Bus的消息代理。假设我们有两个服务,分别是service1和service2,它们都引入了Spring Cloud Bus的依赖并配置了RabbitMQ作为消息代理。我们希望当service1的配置发生变化时,能够将这个变化通知给service2。
堕落飞鸟
2023/04/18
2130
Config Server——使用Spring Cloud Bus自动刷新配置
前文我们讨论了使用/refresh 端点手动刷新配置,但是如果所有微服务节点的配置都需要手动去刷新的话,那必然是一个繁琐的工作,并且随着系统的不断扩张,会变得越来越难以维护。因此,实现配置的自动刷新是很有必要的,本节我们讨论使用Spring Cloud Bus实现配置的自动刷新。 Spring Cloud Bus提供了批量刷新配置的机制,它使用轻量级的消息代理(例如RabbitMQ、Kafka等)连接分布式系统的节点,这样就可以通过Spring Cloud Bus广播配置的变化或者其他的管理指令。使用Spr
用户1516716
2018/04/02
1.7K0
Config Server——使用Spring Cloud Bus自动刷新配置
业余草 SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)
Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。
业余草
2019/01/21
4580
业余草 SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)
SpringCloud 2.x学习笔记:7、Spring Cloud Bus(Greenwich版本)
在pom.xml文件添加spring-cloud-starter-bus-amqp,完整的配置文件如下:
程裕强
2019/07/02
9150
SpringCloud 2.x学习笔记:7、Spring Cloud Bus(Greenwich版本)
一文透析SpringCloud,关于Bus消息总线,总算梳理清楚了
消息代理中间件构建一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有微服务实例监听和消费。
Java程序猿阿谷
2020/07/28
7.1K0
Spring Cloud Bus监听服务配置的变化并自动通知其他服务(一)
Spring Cloud Bus 是 Spring Cloud 为微服务架构提供的消息总线解决方案之一,可以方便地管理配置文件和状态的更新,也可以方便地在微服务之间共享状态和事件。通过使用 Spring Cloud Bus,可以实现微服务架构的实时配置更新和事件传播,从而提高了微服务的可维护性和可扩展性。
堕落飞鸟
2023/04/16
6120
springcloud:配置中心与Bus消息总线
​ 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。 SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,上百个配置文件的管理.…
冷环渊
2021/10/19
7900
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)
如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多。此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启,运维也是苦不堪言,而且还很容易出错。于是,配置中心便由此应运而生了。
朝雨忆轻尘
2019/06/19
8470
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)
Spring Cloud Config - 统一配置中心
废话不多说,本小节我们来开发统一配置中心的server端,在IDEA中新建一个Spring Initializr项目,并选择相应的模块:
端碗吹水
2020/09/24
8350
Spring Cloud Bus中的事件的订阅与发布(二)
在之前的文章Spring Cloud Bus中的事件的订阅与发布(一)介绍了消息总线的相关事件。本文主要介绍消息总线的事件监听器以及消息的订阅与发布。 事件监听器 Spring Cloud Bus中,
aoho求索
2018/04/03
1.9K0
Spring Cloud Bus中的事件的订阅与发布(二)
spring cloud 学习(5) - config server
 分布式环境下的统一配置框架,已经有不少了,比如百度的disconf,阿里的diamand。今天来看下spring cloud对应的解决方案: 如上图,从架构上就可以看出与disconf之类的有很大不
菩提树下的杨过
2018/01/18
8830
spring cloud 学习(5) - config server
SpringCloud详细教程 | 第八篇:消息总线(Spring Cloud Bus)(Greenwich版本)
Spring Cloud Bus使用轻量级消息代理链接分布式系统的节点。然后,这可以用于广播状态改变(例如,配置改变)或其他管理指令。目前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(以及一些更多取决于传输)是其他传输的路线图。
小东啊
2019/06/26
1.9K3
SpringCloud详细教程 | 第八篇:消息总线(Spring Cloud Bus)(Greenwich版本)
Spring Cloud Bus
Spring Cloud Bus主要用于管理和传播分布式项目中的消息,它利用消息中间件的广播机制传播消息。它通过轻量消息代理连接各个分布点;通过分布式的启动器对Spring Boot应用进行扩展;用Amqp消息代理作为通道来建立应用之间的通信频道。它目前支持Kafka和RabbitMQ。
星哥玩云
2022/09/15
4040
Spring Cloud Bus
【愚公系列】2023年11月 Java教学课程 195-SpringCloud(Spring Cloud Config/Bus 分布式配置组件和消息总线)
在微服务架构中,每个服务都需要一些配置信息,例如数据库连接、日志级别、端口号等等。这些配置信息通常存储在配置文件中,但是在分布式的环境下,如何管理和更新这些配置文件呢?
愚公搬代码
2025/06/02
1000
【愚公系列】2023年11月 Java教学课程 195-SpringCloud(Spring Cloud Config/Bus 分布式配置组件和消息总线)
SpringCloud之Bus
​ 在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。
shaoshaossm
2022/12/27
4590
SpringCloud之Bus
Spring Cloud(七)《基于RabbitMQ消息总线方式刷新配置服务》
在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我们把这种机制叫做消息总线(SpringCloud Bus)
小傅哥
2020/07/14
8050
Spring Cloud(七)《基于RabbitMQ消息总线方式刷新配置服务》
Spring Cloud Bus消息总线
  Spring Cloud Bus是Spring Cloud体系内的消息总线,支持RabbitMQ和Kafka两种消息中间件。所谓消息总线,简单理解就是一个消息中心,众多微服务实例都可以连接到总线上,实例可以往消息中心发送或接收信息(通过监听)。例如:实例A发送一条消息到总线上,总线上的实例B可以接收到信息(实例B订阅了实例A),消息总线充当一个中间者的角色,使得实例A和实例B解耦,如下图所示。
别团等shy哥发育
2023/02/25
6390
Spring Cloud Bus消息总线
推荐阅读
相关推荐
Spring Cloud Bus监听服务配置的变化并自动通知其他服务(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档