微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java:委托给方法而无需等待它完成的最佳方式

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?