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方法接收消息。这样,你就可以实现发布订阅模式了。

相关推荐
dkbnull11 小时前
深入理解Spring两大特性:IoC和AOP
spring boot
初次攀爬者11 小时前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
洋洋技术笔记16 小时前
Spring Boot条件注解详解
java·spring boot
洋洋技术笔记2 天前
Spring Boot配置管理最佳实践
spring boot
用户8307196840822 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
大道至简Edward3 天前
Spring Boot 2.7 + JDK 8 升级到 Spring Boot 3.x + JDK 17 完整指南
spring boot·后端
洋洋技术笔记3 天前
Spring Boot启动流程解析
spring boot·后端
怒放吧德德3 天前
Spring Boot 实战:RSA+AES 接口全链路加解密(防篡改 / 防重放)
java·spring boot·后端
李慕婉学姐3 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php