如何解决Java:委托给方法而无需等待它完成的最佳方式
我有一个 AWS SQS 侦听器,当它收到消息时,会调用正确的方法来处理它。问题是它还在等待该方法返回,如果它花费的时间超过可见性超时,我们将再次收到消息。以这个为例:
if (FULL_LOAD.equalsIgnoreCase(msg.getLoadType())) {
//Create the controller and process the message
log.info("Process valid Full Load message from "+msg.getDataSourceName());
productRefService.fullRefresh(ctx);
jobCompletion(msg,jobStart,start);
}
// continue processing
所以现在,在侦听器可以继续之前,它必须等待 productRefService.fullRefresh
完成,这最多可能需要 15 分钟。在我看来,应该有一种方法可以调用服务方法并继续,但我不确定那会是什么样子。使 productRefService
异步?使用Callable
接口?我对返回值不感兴趣 - 我只想释放监听器。
解决方法
根据您的要求:
好问题!如果您使用的是 Java 8 或更高版本,请考虑 CompletableFuture:
Java“CompletableFuture”类似于 Javascript "Promises" 或 C# "async/await"。它的返回值给了调用者一些“等待”的东西 上”(如果需要)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。