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