RabbitMQ手动确认
pom依赖
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
yml / properties配置文件
spring:
rabbitmq:
# ip地址
host:
# 端口
port: 5672
# 用户名
username: guest
# 密码
password:
listener:
simple:
# 表示消费者消费成功消息以后需要手工的进行签收(ack确认),默认为 auto
acknowledge-mode: manual
注意:手动模式配置 acknowledge-mode: manual 默认:auto
手动模式消费者(监听类)三个方法
手动确认,这个比较关键,也是我们配置接收消息确认机制时,多数选择的模式。消费者收到消息后,手动调用basic.ack/basic.nack/basic.reject后,RabbitMQ收到这些消息后,才认为本次投递成功。
方法介绍
channel.basicAck(deliverTag, true); 消费成功,确认消息。第二个参数是否应用于多消息。
channel.basicNack(deliverTag, false, true);不确认(拒绝)deliveryTag对应的消息。第二个参数是否应用于多消息,第三个参数是否requeue。此方法与basicReject区别就是同时支持多个消息,可以nack该消费者先前接收未ack的所有消息。nack后的消息也会被自己消费到。
channel.basicReject(deliverTag, false);拒绝deliveryTag对应的消息。第二个参数是否requeue,true则重新入队列,否则丢弃或者进入死信队列。该方法reject后,该消费者还是会消费到该条被reject的消息。
额外介绍:
channel.basicRecover(true);是否恢复消息到队列。参数是是否requeue,true则重新入队列,并且尽可能的将之前recover的消息投递给其他消费者消费,而不是自己再次消费。false则消息会重新被投递给自己。