我正在使用非阻塞(异步)方式向Kafka发送消息:
ListenableFuture<SendResult<Integer, String>> future = template.send(record);
future.addCallback(new ListenableFutureCallback<SendResult<Integer, String>>() {
@Override
public void onSuccess(SendResult<Integer, String> result) {
handleSuccess(data);
}
@Override
public void onFailure(Throwable ex) {
handleFailure(data, record, ex);
}
});
当send操作完成工作时,此功能非常完美。
但是,如果出现连接问题(例如服务器关闭),结果将变为非异步,并且该方法将一直处于阻塞状态,直到max.block.ms持续时间结束为止。
答案 0 :(得分:2)
这在异步KAfka生产者中很自然。您有两个选择
您还可以为onCompletion()创建一个回调函数