RabbitMQListener 的用法

作者: adm 分类: java 发布时间: 2025-01-27

RabbitMQListener 是用于监听 RabbitMQ 消息队列并处理消息的组件,通常在 Spring AMQP 或 Spring Boot 中使用。以下是 RabbitMQListener 的基本用法和配置步骤。

1. 添加依赖

首先,确保项目中引入了 Spring Boot 和 Spring AMQP 的依赖。

Maven 依赖:

xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

运行 HTML
Gradle 依赖:

groovy

implementation 'org.springframework.boot:spring-boot-starter-amqp'

2. 配置 RabbitMQ 连接

在 application.properties 或 application.yml 中配置 RabbitMQ 的连接信息。

application.properties 示例:

properties

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

application.yml 示例:

yaml

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

3. 创建消息监听器

使用 @RabbitListener 注解创建一个消息监听器。

java

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MyRabbitMQListener {

    // 监听指定的队列
    @RabbitListener(queues = "myQueue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
        // 在这里处理消息
    }
}

4. 配置队列

如果队列不存在,可以在代码中配置队列。

java

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue myQueue() {
        return new Queue("myQueue", true); // true 表示队列持久化
    }
}

5. 发送消息

可以使用 RabbitTemplate 发送消息到队列。

java

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MessageSender {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("myQueue", message);
        System.out.println("Message sent: " + message);
    }
}

6. 运行项目

启动 Spring Boot 项目后,监听器会自动监听指定队列的消息。当有消息发送到队列时,receiveMessage 方法会被调用。

7. 高级用法

监听多个队列:
java

@RabbitListener(queues = {"queue1", "queue2"})
public void receiveMessage(String message) {
    System.out.println("Received message: " + message);
}

处理复杂消息类型:
如果消息是 JSON 或其他复杂类型,可以使用 @Payload 和 @Headers 注解。
java

@RabbitListener(queues = "myQueue")
public void receiveMessage(@Payload MyCustomObject message, @Headers Map headers) {
    System.out.println("Received message: " + message);
    System.out.println("Headers: " + headers);
}

手动确认消息:
如果需要手动确认消息,可以配置 AcknowledgeMode 并使用 Channel 对象。
java

@RabbitListener(queues = "myQueue")
public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
    System.out.println("Received message: " + message);
    channel.basicAck(tag, false); // 手动确认消息
}

总结

RabbitMQListener 是 Spring AMQP 中用于监听 RabbitMQ 消息的核心组件。通过 @RabbitListener 注解,可以轻松实现消息的接收和处理。结合 RabbitTemplate,可以完成消息的发送和接收全流程。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!