代码中的异步调用不使用callback()

jjjwad0x  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(307)

异步调用不使用callback(),程序将等待send()完成,并且不会立即执行下一行。在代码中,

ProducerRecord<Long, String> record = new ProducerRecord<Long, String>(TOPIC, text);
...
    producer.send(record,new Callback() {

        @Override
        public void onCompletion(RecordMetadata metadata, Exception exception) {
            logger.info("sent to kafka");
        }
    });
    logger.info("ACEEVNTMNGR: i am not waiting for the return");
...

代码不执行下一行,但仅在连接超时和“发送到Kafka”显示后执行。实际上,连接到Kafka时出现了问题,出现了错误:
“无法建立到节点-1的连接。经纪人可能不在。”
但是我希望由于异步调用,它不应该等到超时,而是执行 logger.info("ACEEVNTMNGR: i am not waiting for the return"); 在超时发生之前。

bwitn5fc

bwitn5fc1#

KafkaProducer:send 退货 Future<RecordMetadata> ,但不是所有由 send 函数,被 Package 到 Future .
在发送消息之前,元数据必须可用(在第一次发送时,必须获取元数据)。如果元数据不可用或无法获取 send 至少会持续一段时间 max.block.ms . 默认为60000ms。
在您的示例中,您应该看到: ACEEVNTMNGR: i am not waiting for the return 60秒后。

相关问题