【Spring Cloud + RabbitMQ 实现分布式消息总线】—— 每天一点小知识

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。【Spring Cloud + RabbitMQ 实现分布式消息总线】—— 每天一点小知识,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述

                                                                     💧

S

p

r

i

n

g

C

l

o

u

d

+

R

a

b

b

i

t

M

Q

实现分布式消息总线

\color{#FF1493}{Spring Cloud + RabbitMQ 实现分布式消息总线}

SpringCloud+RabbitMQ实现分布式消息总线💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🎐 《Redis》专栏的文章是在学习Redis时,整理的笔记与记录的思考~ 🥏
🥕 《RabbitMQ》专栏的文章是在学习尚硅谷课程时整理的笔记,方便复习巩固~ 🍑
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥



🐳使用 Spring Cloud + RabbitMQ 实现分布式消息总线

Spring Cloud 是一个用于构建分布式系统的开发工具包,而 RabbitMQ 是一种功能强大的消息代理。结合使用 Spring Cloud 和 RabbitMQ,我们可以实现一个强大的分布式消息总线。本文将介绍如何使用 Spring Cloud Bus 和 RabbitMQ 实现以下功能:

  1. 配置刷新
  2. 事件广播
  3. 服务监控
  4. 微服务间通信

准备工作

  💧在开始之前,确保您已经完成以下准备工作:

  • 安装并配置 RabbitMQ。
  • 创建一个 Spring Cloud 微服务项目。

配置刷新

  💧配置刷新是一种实现动态配置更新的功能。当配置发生变化时,我们希望能够自动刷新微服务的配置,而不需要重启服务。下面是实现配置刷新的步骤:

  1. 在您的 Spring Cloud 微服务项目中,添加以下依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置 RabbitMQ 连接信息,在 application.properties 文件中添加以下配置:
spring.rabbitmq.host=<RabbitMQ 主机名>
spring.rabbitmq.port=<RabbitMQ 端口>
spring.rabbitmq.username=<RabbitMQ 用户名>
spring.rabbitmq.password=<RabbitMQ 密码>
  1. 在您的微服务的配置类上添加 @RefreshScope 注解,例如:
@RestController
@RefreshScope
public class MyController {
    // Controller code here
}
  1. 配置 RabbitMQ 发送消息的端点。在 application.properties 文件中添加以下配置:
management.endpoints.web.exposure.include=bus-refresh
  1. 启动您的微服务应用程序,并进行配置更改。

  2. 使用 POST 请求访问 /actuator/bus-refresh 端点,例如:http://localhost:8080/actuator/bus-refresh。这将触发配置刷新并更新微服务的配置。

事件广播

  💧事件广播是一种将事件消息广播给所有微服务实例的功能。下面是实现事件广播的步骤:

  1. 在您的 Spring Cloud 微服务项目中,添加以下依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置 RabbitMQ 连接信息,在 application.properties 文件中添加以下配置:
spring.rabbitmq.host=<RabbitMQ 主机名>
spring.rabbitmq.port=<RabbitMQ 端口>
spring.rabbitmq.username=<RabbitMQ 用户名>
spring.rabbitmq.password=<RabbitMQ 密码>
  1. 创建一个事件消息发布者,用于发送事件消息。例如,创建一个名为 EventPublisher 的类:
import org.springframework.cloud.bus.BusProperties;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

@Component
public class EventPublisher {

    private final ApplicationEventPublisher eventPublisher;
    private final BusProperties busProperties;

    public EventPublisher(ApplicationEventPublisher eventPublisher, BusProperties busProperties) {
        this.eventPublisher = eventPublisher;
        this.busProperties = busProperties;
    }

    public void publishEvent(Object event) {
        String originService = busProperties.getId();
        RemoteApplicationEvent remoteEvent = new RemoteApplicationEvent(event, originService, null);
        eventPublisher.publishEvent(remoteEvent);
    }
}

  1. 在需要触发事件广播的地方,使用 EventPublisher 发布事件消息。例如,在一个 REST Controller 中:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    private final EventPublisher eventPublisher;

    public MyController(EventPublisher eventPublisher) {
        this.eventPublisher = eventPublisher;
    }

    @GetMapping("/trigger-event")
    public String triggerEvent() {
        // 创建事件对象
        MyEvent event = new MyEvent("Hello, world!");

        // 发布事件消息
        eventPublisher.publishEvent(event);

        return "Event triggered";
    }
}
  1. 启动多个微服务实例,并访问其中一个实例的 /trigger-event 路径。事件消息将被广播到所有微服务实例,每个实例都能接收到该事件并执行相应的操作。

服务监控

  💧服务监控可以实现对微服务实例的监控和告警。下面是实现服务监控的步骤:

  1. 在您的 Spring Cloud 微服务项目中,添加以下依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置 RabbitMQ 连接信息,在 application.properties 文件中添加以下配置:
spring.rabbitmq.host=<RabbitMQ 主机名>
spring.rabbitmq.port=<RabbitMQ 端口>
spring.rabbitmq.username=<RabbitMQ 用户名>
spring.rabbitmq.password=<RabbitMQ 密码>
  1. 配置 RabbitMQ 发送消息的端点。在 application.properties 文件中添加以下配置:
management.endpoints.web.exposure.include=bus-health, bus-env
  1. 启动您的微服务应用程序,并访问 /actuator/bus-health/actuator/bus-env 端点,例如:http://localhost:8080/actuator/bus-healthhttp://localhost:8080/actuator/bus-env。这将提供有关微服务实例的健康状态信息和环境变量信息。

  2. 配置监控系统以订阅并处理 RabbitMQ 发送的监控消息,实现实时监控和告警功能。

微服务间通信

  💧微服务间通信是通过消息传递实现解耦和异步处理的方式。下面是实现微服务间通信的步骤:

  1. 在您的 Spring Cloud 微服务项目中,添加以下依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置 RabbitMQ 连接信息,在 application.properties 文件中添加以下配置:
spring.rabbitmq.host=<RabbitMQ 主机名>
spring.rabbitmq.port=<RabbitMQ 端口>
spring.rabbitmq.username=<RabbitMQ 用户名>
spring.rabbitmq.password=<RabbitMQ 密码>
  1. 创建一个消息消费者,用于处理接收到的消息。例如,创建一个名为 MessageConsumer 的类:
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer implements ApplicationListener<RemoteApplicationEvent> {

    @Override
    public void onApplicationEvent(RemoteApplicationEvent event) {
        if (event instanceof MyMessageEvent) {
            MyMessageEvent messageEvent = (MyMessageEvent) event;
            // 处理接收到的消息
            handleMessage(messageEvent.getMessage());
        }
    }

    private void handleMessage(String message) {
        // 处理消息的逻辑
        System.out.println("Received message: " + message);
    }
}
  1. 创建一个消息发布者,用于发送消息给其他微服务。例如,创建一个名为 MessagePublisher 的类:
import org.springframework.cloud.bus.BusProperties;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

@Component
public class MessagePublisher {

    private final ApplicationEventPublisher eventPublisher;
    private final BusProperties busProperties;

    public MessagePublisher(ApplicationEventPublisher eventPublisher, BusProperties busProperties) {
        this.eventPublisher = eventPublisher;
        this.busProperties = busProperties;
    }

    public void publishMessage(String message) {
        String originService = busProperties.getId();
        MyMessageEvent messageEvent = new MyMessageEvent(message, originService);
        eventPublisher.publishEvent(messageEvent);
    }
}
  1. 创建一个自定义的消息事件类,用于封装消息内容。例如,创建一个名为 MyMessageEvent 的类:
import org.springframework.cloud.bus.event.RemoteApplicationEvent;

public class MyMessageEvent extends RemoteApplicationEvent {

    private String message;

    // 构造函数、getter、setter 省略...

    public MyMessageEvent(String message, String originService) {
        super(message, originService);
        this.message = message;
    }
}
  1. 在需要发送消息的地方,使用 MessagePublisher 发布消息。例如,在一个 REST Controller 中:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    private final MessagePublisher messagePublisher;

    public MyController(MessagePublisher messagePublisher) {
        this.messagePublisher = messagePublisher;
    }

    @PostMapping("/send-message")
    public String sendMessage(@RequestBody String message) {
        // 发送消息给其他微服务
        messagePublisher.publishMessage(message);

        return "Message sent";
    }
}
  1. 启动多个微服务实例,并访问其中一个实例的 /send-message 路径,发送消息给其他微服务。其他微服务的 MessageConsumer 将接收到消息并进行处理。

总结

通过完成上述步骤,你可以结合 Spring Cloud 和 RabbitMQ 实现配置刷新、事件广播、服务监控以及微服务间通信的功能。这些功能可以提供更强大的分布式系统能力,并帮助实现解耦、异步处理和实时监控的目标。


在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159743.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!