SpringBoot整合RabbitMQ实现发布订阅

RabbitMQ是一个开源的消息代理和队列服务器,用于通过轻量级消息传递协议(AMQP)在分布式系统中传递消息。在RabbitMQ中,主要有以下角色:

  1. 生产者(Producer):负责发送消息的应用程序。生产者将消息发布到RabbitMQ中的交换器(Exchange)。
  2. 消费者(Consumer):负责接收消息的应用程序。消费者订阅队列(Queue)中的消息,当有新消息到达时,RabbitMQ会将消息发送给消费者。
  3. 交换器(Exchange):负责接收生产者发送的消息,并根据路由键(Routing
    Key)将消息路由到相应的队列。RabbitMQ支持多种类型的交换器,如直接交换器、主题交换器、扇形交换器和头交换器。
  4. 队列(Queue):存储消息的缓冲区。队列中的消息会被消费者接收并处理。一个队列可以有多个消费者同时监听。
  5. 绑定(Binding):用于将交换器和队列关联起来。绑定时需要指定一个路由键,生产者发送消息时也需要指定一个路由键,当两者匹配时,消息会被发送到相应的队列。
  6. 路由键(Routing
    Key):用于确定消息应该发送到哪个队列。生产者发送消息时需要指定一个路由键,交换器根据路由键将消息路由到相应的队列。
  7. 连接(Connection):客户端与RabbitMQ服务器之间的TCP连接。
  8. 信道(Channel):在连接上创建的逻辑通道,用于发送和接收消息。一个连接可以包含多个信道,每个信道代表一个会话任务。
  9. 消息确认(ACK):消费者收到消息后,向RabbitMQ发送确认信息,表示消息已被成功处理。如果未收到确认,RabbitMQ会将消息重新发送给消费者。
  10. 死信队列(Dead Letter
    Queue):用于存储无法被正常消费的消息。当消息无法被正常消费时,RabbitMQ会将其转移到死信队列,以便后续处理。

以下是SpringBoot整合RabbitMQ实现发布订阅示例代码:

1. 添加依赖

在项目的pom.xml文件中添加Spring Boot和RabbitMQ的依赖:

java 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>

2. 配置RabbitMQ

在application.properties文件中配置RabbitMQ的相关信息,例如服务器地址、端口、用户名和密码等:

java 复制代码
spring.rabbitmq.host=你的RabbitMQ服务器地址
spring.rabbitmq.port=5672
spring.rabbitmq.username=用户名
spring.rabbitmq.password=密码

3. 创建消息发送者

创建一个类,用于发送消息到RabbitMQ队列。在这个类中,我们需要注入一个AmqpTemplate对象,然后使用它的convertAndSend方法发送消息。

java 复制代码
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageSender {

    @Autowired
    private AmqpTemplate amqpTemplate;

    public void sendMessage(String exchange, String routingKey, Object message) {
        amqpTemplate.convertAndSend(exchange, routingKey, message);
    }
}

4. 创建消息接收者

创建一个类,用于从RabbitMQ队列接收消息。在这个类中,我们需要注入一个AmqpTemplate对象,并使用它的@RabbitListener注解来监听队列中的消息。当有新的消息到达时,这个方法会被自动调用。

java 复制代码
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageReceiver {

    @RabbitListener(queues = "你的消息队列名称")
    public void handleMessage(Object message) {
        System.out.println("接收到消息: " + message);
    }
}

5. 测试发布订阅模式

在你的应用程序中,使用MessageSender类的sendMessage方法发送消息,然后在另一个实例中使用MessageReceiver类的handleMessage方法接收消息。这样,你就可以实现发布订阅模式了。

相关推荐
SuniaWang22 分钟前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
韩立学长25 分钟前
Springboot校园跑腿业务系统0b7amk02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
sheji341630 分钟前
【开题答辩全过程】以 基于springboot的扶贫系统为例,包含答辩的问题和答案
java·spring boot·后端
Meepo_haha3 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
sheji34163 小时前
【开题答辩全过程】以 基于springboot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
xiaohe074 小时前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
gechunlian885 小时前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
givemeacar6 小时前
Spring Boot中集成MyBatis操作数据库详细教程
数据库·spring boot·mybatis
Mr.45677 小时前
Spring Boot集成Redis:单机、哨兵、集群三种模式统一配置实战
spring boot·redis·bootstrap
lay_liu7 小时前
Spring Boot 自动配置
java·spring boot·后端