消费端手动确认消费

消费端 ACK 和 NACK

消费端消费消息的时候,出现了一般异常可以进行日志记录后续进行补偿处理,但是如果在处理消息时服务器出现了宕机,这时候就会丢失消息。rabbitmq 提供了手动签收机制,消费端向 broker 回复 ack 信号,确认消息是否已经消费。如果确认消费,broker 才会将消息删除,不确认消费的话,消费者恢复正常之后,broker 会再次投递该消息。此外,消费端处理异常的话,也可以回复 broker 一个 nack 信号将消息重回队列,broker 会再次投递该消息。

channel.basicAck
void basicAck(long deliveryTag, boolean multiple) throws IOException;
  • deliveryTag:该消息的index;
  • multiple:是否批量,如果为 true,将一次性ack所有小于deliveryTag的消息;确认收到消息。
channel.basicNack
void basicNack(long deliveryTag, boolean multiple, boolean requeue) throws IOException;
  • deliveryTag:该消息的index;
  • multiple:是否批量,如果为 true,将一次性ack所有小于deliveryTag的消息;确认收到消息;
  • requeue:是否重回队列,true 重回队列,false 消息就直接丢弃了。

手动确认实现

添加配置
# 设置手动签收
spring.rabbitmq.listener.simple.acknowledge-mode=manual
编码实现
@Service
@Slf4j
public class MsgListener {
   
    @RabbitListener(queues = "testDirectRouting")
    public void listen(String object, Message message, Channel channel) {
   
        try {
   
            MessageProperties messageProperties = message.getMessage
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值