rabbitmq--消费者(消费者没有报异常,但是接受不到消息了,channel通道关闭了。)

    xiaoxiao2022-07-12  164

        最近,刚刚项目用起了rabbitmq消息对列,出现了一个错误,拿出来,让大家一起看看,避免一些常见错误。

        期初,我的消费者端是处理完数据后,通过channel.basicAck(envelope.getDeliveryTag(),false);来确认消息被成功消费掉了。如果出现其他情况包括异常,通过channel.basicReject(envelope.getDeliveryTag(),false);拒收消息。很正常,成功运行一段时间之后,我改了一下业务逻辑,不小心把上面的两个处理消息的方法写到了一起。也就是先确认消息被消费掉,然后又告诉服务器,消息被拒收。例如:

    业务逻辑改前:

    if(){

    channel.basicAck(envelope.getDeliveryTag(),false);

    }else{

    channel.basicReject(envelope.getDeliveryTag(),false);

    }

    更改后:

    if(){

    channel.basicAck(envelope.getDeliveryTag(),false);

    channel.basicReject(envelope.getDeliveryTag(),false);

    }else{

    channel.basicReject(envelope.getDeliveryTag(),false);

    }

    有意思不,哈哈哈,更改后的错误逻辑,导致channel通道关闭。并且没有报异常,甚是苦难,浪费了不少时间,希望给大家能避免此坑。

    查问题期间,跟了一下rabbitmq的代码,由于初学rabbitmq,也没有弄明白为什么channel关闭了,并且没有报错。希望比较了解rabbitmq的同学能给与一些建议。

    最新回复(0)