1、简介
点击访问 Spring AMQP 官方文档
2、引入依赖
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>3.1.3</version>
</dependency>
3、精简 Demo
- 在控制台创建队列 testQueue
- 在 publisher (消息发送者) 利用 Spring AMQP 直接向 testQueue 发消息
- 在 consumer (消息消费者) 利用 Spring AMQP 编写消费者,监听并消费 testQueue 的消息
3.1、配置
spring:
rabbitmq:
host: 127.0.0.1 # 主机名
port: 5672 # 端口
virtual-host: Test # 虚拟主机
password: test # 用户名
username: test # 密码
3.2、Publisher 代码
Spring AMQP 提供了 RabbitTemplate
工具类,使用起来非常方便!
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void doTestPublisher () {
String queueName = "testQueue";
String msg = "hello amqp!";
// 参数:队列名,消息
rabbitTemplate.convertAndSend(queueName, msg);
}
3.3、Consumer 代码
Spring AMQP 提供了声明式消息监听,只需要挂上 @RabbitListener
注解,并配上要监听的队列即可!
@Component
public class MqTestConsumerListener {
@RabbitListener(queues = "testQueue")
public void doTestConsumer (String msg) {
System.out.println("消费了消息:" + msg);
}
}
4、Work Quenes (work 模型)
Work Quenes,任务模型。简单来说就是 让多个消费者绑定到同一个队列,共同消费队列中的消息。
消费者消息推送限制
默认情况下,RabbitMQ 会将消息依次轮询投递给绑定在队列上的每一个消费者;但这并没有考虑到不同消费者的消费能力,容易造成消息堆积。
因此我们需要修改推送机制,设置prefetch
的值为1
,确保同一时刻最多投递给消费者 1 条消息。
spring:
rabbitmq:
listener:
simple:
prefetch: 1 # 每次最多获取1条消息,处理完了才能获取下一条消息
● work 模型作用:
- 多个消费者绑定到一个队列,可以加快消息处理速度
- 同一条消息只会被一个消费者处理
- 通过设置 prefetch 来控制消费者领取消息的数量,处理完一条再领取下一条,实现能者多劳