spring 如何处理Future#get()中的中断异常?

v8wbuo2f  于 2022-10-30  发布在  Spring
关注(0)|答案(1)|浏览(227)
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警告吗?或者用超时选项优雅地处理未来?

mw3dktmi

mw3dktmi1#

不要使用多重catch,并在InterruptedException catch块中调用Thread.currentThread().interrupt(),这样下一个可中断的操作将获得该异常。
“吞下”中断是不好的做法。

相关问题