异步调用不能与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的连接。 可用。”
但是我希望由于异步调用,它不应该等到timeout超时,而是执行
logger.info("ACEEVNTMNGR: i am not waiting for the return");
在超时发生之前。
答案 0 :(得分:0)
KafkaProducer:send
返回Future<RecordMetadata>
,但不是send
函数执行的所有工作都包装在Future
中。
在发送消息元数据之前必须可用(首先发送时必须提取它们)。
如果元数据不可用或无法提取,则send
的持续时间至少为max.block.ms
。默认情况下为60000ms。
在您的示例中,您应该在60秒后看到:ACEEVNTMNGR: i am not waiting for the return
。