朱同学KLAE
2022-01-13 15:10
采纳率: 0%
浏览 14

RabbitMq监听队列获取的数据顺序不对

背景

使用topic模式,只有一个消费者

消息放入时按顺序放入mq
第一条日志时间Time:1642056522727 假设为消息a
第二条放入mq日志时间Time:1642056522728 假设为消息b

问题相关代码,请勿粘贴截图
@RabbitListener(containerFactory = "rabbitConfirmListenerContainerFactory",queues = {Constant.XXXXXX},exclusive = true)
    public void xxxxListener(@Payload String message,Channel channel,@Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag){
        try {
            log.info("Timestamp:{},Thread:{} 接收到消息: {}",TimeUtil.getTimeLong(new Date()),Thread.currentThread().getId(),message);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                //回复ack
                channel.basicAck(deliveryTag, true);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

运行结果及报错内容

先接收到消息b的时间和线程id:Timestamp:1642056523004,Thread:23
后接收到消息a的时间和线程id:Timestamp:1642056523009,Thread:23

不是必现,但是偶尔会有几条发生问题。大部分是正确的

我的解答思路和尝试过的方法

尝试了设置监听为单线程且最大线程为1,PrefetchCount设为1,也会出现顺序颠倒的问题。

我想要达到的结果

能够先获取a再获取b

1条回答 默认 最新

相关推荐 更多相似问题