RabbitMQ 手动确认超时处理

本文介绍了RabbitMQ在手动ACK模式下,如果消费者未调用ack方法处理消息,RabbitMQ会在15分钟后重新发送消息的机制。通过一个Java示例展示了当消息处理异常时,如何避免丢失消息并理解consumer ack timeout的逻辑。重点讨论了异常处理和手动确认消息的重要性。
摘要由CSDN通过智能技术生成

RabbitMQ在手动模式下,如果没有调用手动的ack方法,那么在等待十五分钟之后,会重新把消息给消费者。

@Component
public class TestQueueReceiver {

    @RabbitListener(queues = "TestQueue")
    @RabbitHandler
    public void handlerTestQueue(Message msg, Channel channel) throws IOException, InterruptedException {
        String message = new String(msg.getBody(), StandardCharsets.UTF_8);
        System.out.println("message="+message);
        Thread.sleep(5000L);
        if("0".equals(message)){
            throw new RuntimeException("0的消息消费异常");
        }
        channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
        System.out.println(message);

    }

}

如上处理消息为0时,会抛出异常,手动的消息确认方法就不会被调用。十五分钟后,消费端会排除consumer ack time out,RabbbitMQ会重新把消息发给消费者。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值