public void produceMessage(String dataPushNotif) {
PushNotif msg = PushNotif.newBuilder()
.setDatapushnotif(dataPushNotif)
.build();
ListenableFuture<SendResult<String, PushNotif>> future =
kafkaTemplate.send(destTopic, msg);
try {
var result = future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
log.debug(buildSuccesLogMessage(result));
}
catch (InterruptedException | ExecutionException | TimeoutException e) {
log.debug("FAILED: {}", e);
}
}
通过上面的代码,我得到了一个sonarlint警告 * 要么重新中断这个方法,要么重新抛出可以在这里捕获的“InterruptedException”。*(java:S2142)
我可以用addCallback()处理成功和失败,以便优雅地发送,但我看不到任何其他方法来设置线程执行的超时。
有什么办法可以处理sonarlint警告吗?或者用超时选项优雅地处理未来?
1条答案
按热度按时间mw3dktmi1#
不要使用多重catch,并在
InterruptedException
catch块中调用Thread.currentThread().interrupt()
,这样下一个可中断的操作将获得该异常。“吞下”中断是不好的做法。