我正在使用Spring-Kafka版本1.2.1,当Kafka服务器关闭/无法访问时,异步发送调用阻塞一段时间.它似乎是TCP超时.代码是这样的:
ListenableFuture<SendResult<K, V>> future = kafkaTemplate.send(topic, key, message);
future.addCallback(new ListenableFutureCallback<SendResult<K, V>>() {
@Override
public void onSuccess(SendResult<K, V> result) {
...
}
@Override
public void onFailure(Throwable ex) {
...
}
});
Run Code Online (Sandbox Code Playgroud)
我已经快速浏览了Spring-Kafka代码,它似乎只是将任务传递给kafka客户端库,将回调交互转换为未来的对象交互.看看kafka客户端库,代码变得更加复杂,我没有花时间去理解它,但我想它可能在同一个线程中进行远程调用(元数据,至少?).
作为用户,我期望返回未来的Spring-Kafka方法立即返回,即使远程kafka服务器无法访问.
如果我的理解是错误的,或者如果这是一个错误,任何确认将是受欢迎的.我现在最终将它变为异步.
另一个问题是Spring-Kafka文档在开始时说它提供了同步和异步发送方法.我找不到任何不返回期货的方法,也许文档需要更新.
如果需要,我很乐意提供任何进一步的细节.谢谢.