冰a冰 2022-07-04 10:13 采纳率: 85.7%
浏览 58

kafka的isDone()方法的返回值解释让人疑惑

如题,我在测试时代码如下,但消费者成功消费到生产者的消息了缺仍然走返回为“false”,看了原代码注释之后有些疑惑
        while (true) {
            String msg = "生产者" + LMCommonTool.fullSimpleDateFormat.format(new Date());
            ProducerRecord<String, String> record = new ProducerRecord<String, String>("test-topic", msg);
            Future send = kafkaProducer.send(record);
            if (send.isDone()) {
                System.out.println("发送成功" + msg);
            } else {
                System.out.println("发送失败" + msg);
            }
            Thread.sleep(2000);
        }

原代码注释如下

img

  • 写回答

1条回答 默认 最新

  • 於黾 2022-07-04 10:18
    关注

    你在死循环里的send,每次都是一个新的对象
    你并没有判断之前send出去的消息是否被接收,而一直在判断刚刚发送的消息是否被接收
    而刚刚发送的消息刚过了一个时钟周期,怎么可能会被接收呢
    如果你不愿意用异步的方式来做,那就加个sleep,先等等

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月4日