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

相关推荐
山荷枝6 小时前
04-框架--SpringBoot
java·spring boot·后端
用户3126874877209 小时前
你的配置真的绑定上了吗?Spring Boot @ConfigurationProperties 全链路拆解
spring boot
2601_963870229 小时前
【计算机毕业设计】基于Spring Boot+Vue的高考志愿填报系统的设计与实现
spring boot·课程设计·高考
andongni2039 小时前
SpringBoot 入门实验报告
java·spring boot·后端
2601_9538246110 小时前
【计算机毕业设计】基于Spring Boot+Vue的家电购物系统的设计与实现
spring boot·后端·课程设计
码农进化录10 小时前
Java 程序员的 AI 进化论 | 用 AI 生成 Spring Boot 脚手架,省下两小时重复劳动
java·spring boot·openai
paopaokaka_luck10 小时前
基于springboot3+vue3的美妆商城平台(AI问答、协同过滤算法、支付宝沙盒支付、物流快递api、Echarts图形化分析)
java·前端·spring boot·学习·maven·echarts
sugar__salt10 小时前
MyBatis-Plus 从入门到实战:高效简化数据库开发的完整指南
数据库·spring boot·mybatis·数据库开发
wwwzhouzy11 小时前
SpringBoot 响应式编程
java·spring boot·后端·响应式编程
冰夏之夜影11 小时前
【解决方案】SpringBoot项目添加ssl证书后不生效问题
spring boot·后端·ssl