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

相关推荐
Asurplus21 小时前
【RabbitMQ】5、RabbitMQ中启用MQTT功能
mqtt·消息队列·rabbitmq·订阅主题
攀小黑1 天前
docker 部署rabbitmq消息队列并安装延迟队列插件
docker·容器·rabbitmq
千寻技术帮1 天前
10341_基于Springboot的珠宝销售网站
spring boot·mysql·毕业设计·商城·珠宝商城
熏鱼的小迷弟Liu1 天前
【消息队列】RabbitMQ的交换机有哪几种类型?
消息队列·rabbitmq
一只叫煤球的猫1 天前
为什么Java里面,Service 层不直接返回 Result 对象?
java·spring boot·面试
小当家.1051 天前
从零构建项目认知:如何画出一张合格的系统架构图(以供应链系统为例)
java·spring boot·学习·架构·系统架构·供应链·实习
悟能不能悟1 天前
springboot如何通过url地址获得这个地址的文件
java·spring boot·后端
沛沛老爹1 天前
Web开发者突围AI战场:Agent Skills元工具性能优化实战指南——像优化Spring Boot一样提升AI吞吐量
java·开发语言·人工智能·spring boot·性能优化·架构·企业开发
yangminlei1 天前
Spring Boot 响应式 WebFlux 从入门到精通
java·spring boot·后端
曹轲恒1 天前
SpringBoot配置文件
java·spring boot