异步调用不回调()的代码工作

问题描述 投票:0回答:1

不回调(工作异步调用),该程序等待的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");
...

该代码不执行的下一行,但仅显示连接超时和“发送到海边的卡夫卡”后执行。其实有一个与连接到卡夫卡和得到错误的问题:

“连接到节点-1不能成立。经纪人可能无法使用。”

但我希望,因为异步调用的,它不应该等待,直到超时,但超时发生前执行qazxsw POI。

callback apache-kafka kafka-producer-api
1个回答
0
投票

logger.info("ACEEVNTMNGR: i am not waiting for the return");返回KafkaProducer:send,而不是由Future<RecordMetadata>函数执行的所有工作,被包裹到send

之前发送消息的元数据必须是可用的(在第一次发送他们必须取出)。如果元数据不可用或无法获取Future将至少持续send。默认情况下,它是60000毫秒。

在您的例子中,你应该看到:max.block.ms 60秒后。

© www.soinside.com 2019 - 2024. All rights reserved.