RabbitMQListener 的用法
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 Mapheaders) { 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,可以完成消息的发送和接收全流程。

 
        
