本文介绍三种常用操作,基于spring-boot-starter-amqp依赖
手动ack
work模式(能者多劳)
消息格式转换
手动ack
消息确认模式
在amqp协议中消息确认有两种模式
自动确认模式(automatic acknowledgement model)当消息代理将消息发送给应用后立即删除
显式确认模式(explicit acknowledgement model)待应用发送一个确认回执后再删除消息
而在spring-boot-starter-amqp,spring定义了三种
NONE 没有ack的意思,对应rabbitMQ的自动确认模式
MANUAL 手动模式,对应rabbitMQ的显式确认模式
AUTO 自动模式,对应rabbitMQ的显式确认模式
首先注意的是spring-amqp中的自动模式与rabbit中的自动模式是不一样的,其次,在spring-amqp中MANUAL 与 AUTO的关系有点类似于在spring中手动提交事务与自动提交事务的区别,一个是手动发送ack一个是在方法执行完,没有异常的情况下自动发送ack
代码实现
三个步骤
设置消费者的消息确认模式
手动确认/拒绝消息
设置消息拒绝策略
设置消费者的消息确认模式:
@Configuration
public class ListenerConfig {
@Bean("myListenerFactory")
public RabbitListenerContainerFactory myFactory(ConnectionFactory connectionFactory){
SimpleRabbitListenerContainerFactory containerFactory=
new SimpleRabbitListenerContainerFactory();
containerFactory.setConnectionFactory(connectionFactory);
//设置消费者的消息确认模式
containerFactory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
return containerFactory;
}
}
手动确认/拒绝消息:
@Component
@RabbitListener(
containerFactory = "myListenerFactory",
bindings = @QueueBinding(
value = @Queue("myManualAckQueue"),