Spring Boot 实现 RabbitMQ 监听消息的几种方式

Spring Boot 实现 RabbitMQ 监听消息的几种方式

  • [1. @RabbitListener 注解方式](#1. @RabbitListener 注解方式)
  • [2. MessageListener 接口方式](#2. MessageListener 接口方式)
  • [3. MessageListenerAdapter 适配器方式](#3. MessageListenerAdapter 适配器方式)
  • [4. @RabbitHandler 注解方式](#4. @RabbitHandler 注解方式)

Spring Boot 实现 RabbitMQ 监听消息的方式有以下几种:

  1. @RabbitListener 注解方式 :通过在方法上标记 @RabbitListener 注解来监听指定的队列,当消息到达时,被注解的方法将被调用。

  2. MessageListener 接口方式 :实现 Spring AMQP 提供的 MessageListener 接口,编写自定义的消息监听器,然后使用 SimpleMessageListenerContainer 设置消息监听器。

  3. MessageListenerAdapter 适配器方式 :通过 MessageListenerAdapter 类,可以将普通的 Java 方法转换为消息监听器,从而简化消息处理逻辑。

  4. @RabbitHandler 注解方式 :结合 @RabbitListener@RabbitHandler 注解,可以实现多个不同类型消息的处理方法,根据消息内容的不同调用对应的处理方法。

这些方式都可以在 Spring Boot 项目中方便地实现 RabbitMQ 的消息监听功能。

1. @RabbitListener 注解方式

以下是使用 @RabbitListener 注解方式实现 RabbitMQ 消息监听的示例代码:

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

@Component
public class RabbitMQListener {

    @RabbitListener(queues = "myQueue")
    public void handleMessage(String message) {
        System.out.println("Received message: " + message);
        // 在这里处理接收到的消息
    }
}

在这个示例中,我们创建了一个名为 RabbitMQListener 的类,并使用 @RabbitListener 注解标记 handleMessage 方法,指定监听名为 "myQueue" 的队列。当消息到达队列时,handleMessage 方法将被调用来处理接收到的消息。

2. MessageListener 接口方式

以下是使用 MessageListener 接口方式实现 RabbitMQ 消息监听的示例代码:

java 复制代码
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;

public class MyMessageListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
        System.out.println("Received message: " + new String(message.getBody()));
        // 在这里处理接收到的消息
    }

    public static void main(String[] args) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory); // 设置连接工厂
        container.setQueueNames("myQueue"); // 设置监听的队列名称
        container.setMessageListener(new MyMessageListener()); // 设置消息监听器
        container.start(); // 启动监听容器
    }
}

在这个示例中,我们创建了一个实现了 MessageListener 接口的 MyMessageListener 类来处理接收到的消息。然后,我们使用 SimpleMessageListenerContainer 设置连接工厂、队列名称和消息监听器,并启动监听容器。当消息到达时,onMessage 方法将被调用来处理接收到的消息。

3. MessageListenerAdapter 适配器方式

以下是使用 MessageListenerAdapter 适配器方式实现 RabbitMQ 消息监听的示例代码:

java 复制代码
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.SimpleMessageConverter;

public class MyMessageListener {

    public void handleMessage(String message) {
        System.out.println("Received message: " + message);
        // 在这里处理接收到的消息
    }

    public static void main(String[] args) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory); // 设置连接工厂
        container.setQueueNames("myQueue"); // 设置监听的队列名称

        MessageListenerAdapter adapter = new MessageListenerAdapter(new MyMessageListener());
        adapter.setDefaultListenerMethod("handleMessage"); // 设置默认处理方法
        MessageConverter converter = new SimpleMessageConverter();
        adapter.setMessageConverter(converter); // 设置消息转换器

        container.setMessageListener(adapter); // 设置消息监听适配器
        container.start(); // 启动监听容器
    }
}

在这个示例中,我们创建了一个 MyMessageListener 类,并定义了一个处理消息的方法 handleMessage。然后,我们使用 MessageListenerAdapter 类将 MyMessageListener 类中的方法转换为消息监听器,并设置默认处理方法。最后,将消息监听适配器设置到 SimpleMessageListenerContainer 中,并启动监听容器来处理接收到的消息。

4. @RabbitHandler 注解方式

使用 @RabbitHandler 注解方式结合 @RabbitListener 注解实现多个不同类型消息的处理示例代码如下:

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

@Component
@RabbitListener(queues = "myQueue")
public class MyMessageHandler {

    @RabbitHandler
    public void handleStringMessage(String message) {
        System.out.println("Received string message: " + message);
        // 处理字符串类型消息
    }

    @RabbitHandler
    public void handleIntMessage(Integer message) {
        System.out.println("Received integer message: " + message);
        // 处理整数类型消息
    }
}

在这个示例中,我们创建了一个名为 MyMessageHandler 的类,并使用 @RabbitListener 注解标记整个类,指定监听名为 "myQueue" 的队列。然后,我们在类中定义了两个处理消息的方法,分别使用 @RabbitHandler 注解标记,分别处理字符串类型和整数类型的消息。当不同类型的消息到达队列时,根据消息类型调用对应的处理方法来处理消息。

相关推荐
一 乐4 小时前
酒店预订|基于springboot + vue酒店预订系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·酒店预订系统
格鸰爱童话5 小时前
向AI学习项目技能(六)
java·人工智能·spring boot·python·学习
H_老邪5 小时前
spring boot 学习之路-1.0
spring boot·后端·学习
Flittly5 小时前
【SpringAIAlibaba新手村系列】(18)Agent 智能体与今日菜单应用
java·spring boot·agent
Andya_net6 小时前
Java | 基于 Feign 流式传输操作SFTP文件传输
java·开发语言·spring boot
成为大佬先秃头7 小时前
开放标准(RFC 7519):JSON Web Token (JWT)
spring boot·后端·json·jwt
不懂的浪漫9 小时前
# mqtt-plus 架构解析(八):Spring Boot 自动装配,这些零件是怎么被粘合起来的
spring boot·后端·物联网·mqtt·架构
却话巴山夜雨时i9 小时前
互联网大厂Java面试场景:Spring Boot、微服务与Redis实战解析
spring boot·redis·微服务·kafka·prometheus·java面试·电商场景
希望永不加班9 小时前
SpringBoot 配置绑定:@ConfigurationProperties
java·spring boot·后端·spring
indexsunny9 小时前
互联网大厂Java面试实战:Spring Boot、MyBatis与Kafka在电商场景中的应用
java·spring boot·面试·kafka·mybatis·电商·技术栈