springboot + rabbitmq 消费者消息确认 (Ack)
开启消息确认
spring.rabbitmq.listener.direct.acknowledge-mode=manual
spring.rabbitmq.listener.simple.acknowledge-mode=manual
消费者
@Component
public class RabbitMqComponent7 {
@RabbitListener(queues = "queueAck")
public void listerQueueR1(Channel channel,String message,@Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
System.out.print(message);
channel.basicAck(tag,false);
}
}
channel.basicAck(deliveryTag, false);
deliveryTag:该消息的index
multiple:是否批量.true:将一次性ack所有小于deliveryTag的消息。
channel.basicNack(deliveryTag, false, true);
deliveryTag:该消息的index
multiple:是否批量.true:将一次性拒绝所有小于deliveryTag的消息。
requeue:被拒绝的是否重新入队列
channel.basicReject(deliveryTag:, false);
deliveryTag:该消息的index
requeue:被拒绝的是否重新入队列
------------------------------------------------------
basicAck:成功消费,消息从队列中删除
basicNack:requeue=true,消息重新进入队列,false被删除
basicReject:等同于basicNack
basicRecover:消息重入队列,requeue=true,发送给新的consumer,false发送给相同的consumer