李华照 2022-04-13 17:30
浏览 29
已结题

RocketMQ消费失败

问题遇到的现象和发生背景

当消费 msgs 数组时, 处理其中一条消息报错。如果返回ConsumeOrderlyStatus.RECONSUME_LATER, 那么数组其它的消息怎办?都被retry吗?

假如,msgs有3条消息, 处理第1条成功,第2条时,失败了,返回了RECONSUME_LATER。
那么问题来了, 问题1) 3条消息都重试,那么第1条已经处理过了,(例如已入库, 要作幂等性控制?) 问题2)第3条 会被错杀? 问题3, 第3条重试时,也许再次被错杀

问题相关代码,请勿粘贴截图
   consumer.registerMessageListener(new MessageListenerOrderly() {

       Random random = new Random();

       @Override
       public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {
           context.setAutoCommit(true);
           for (MessageExt msg : msgs) {
               try {
                   //模拟业务逻辑处理中...
               TimeUnit.SECONDS.sleep(random.nextInt(10));
               } catch (Exception e) {
                   e.printStackTrace();
                    return ConsumeOrderlyStatus.RECONSUME_LATER;
               }
           }

           return ConsumeOrderlyStatus.SUCCESS;
       }
   });
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月21日
    • 创建了问题 4月13日

    悬赏问题

    • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
    • ¥15 孟德尔随机化怎样画共定位分析图
    • ¥18 模拟电路问题解答有偿速度
    • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
    • ¥15 误删注册表文件致win10无法开启
    • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
    • ¥60 ESP32怎么烧录自启动程序
    • ¥50 html2canvas超出滚动条不显示
    • ¥15 java业务性能问题求解(sql,业务设计相关)
    • ¥15 52810 尾椎c三个a 写蓝牙地址