我使用卡夫卡的Java API V2.1。我想知道什么样的异常将从底层API被传播到客户端应用程序代码
这是发送调用我产生回调代码:
@Override
public void onCompletion(RecordMetadata metadata, Exception e) {
if (e == null) {
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest("Sent message " + mySentRecord
+ " with offset " + metadata.offset()
+ " on topic:partition "
+ metadata.topic() + ":" + metadata.partition());
}
}
else {
try {
throw e;
}
catch (NotEnoughReplicasAfterAppendException |
NotEnoughReplicasException |
TimeoutException exception )
{
StringWriter outError = new StringWriter();
e.printStackTrace(new PrintWriter(outError));
LOG.warning(outError.toString());
}
catch (Exception exception) {
throw new ApplicationDeath(exception);
}
}
}
在这里,我赶上NotEnoughReplicasAfterAppendException,NotEnoughReplicasException和TimeoutException异常,但我从来没有看到除了超时出任何异常,当我在ISR杀经纪人。我看不出有任何异常断开或没有足够的副本例外。
我知道,卡夫卡API将内部重试连接,但我希望得到通知在应用程序代码这样的尝试。与之相似,我没有看到消费者代码中的任何这样的例外,除了元超时。
我怎样才能做到这一点,并收到通知的任何连接中断,没有足够的副本等等?其他什么异常,我应该是捕捉和处理在这里?
谢谢,现在
首先,从来没有throw e
并抓住它。
相反,检查if (e instanceof ExceptionClass)
这些都是上市in the JavaDoc
在这里重新格式化为可读性。