2016-03-01 33 views
1

我如何使用阅读此页,Spring的异步调用: https://spring.io/guides/gs/async-method/使用Spring的未来<Entity>和异步注释

这源于几个设计问题:

1)你隐藏的抽象背后异步功能,或者你直接使用它们?

2)在上面的示例链接中,如果每个异步调用已返回,代码都会有一个“while循环”检查每个10ms。有没有其他的方法来实现这个,然后是一个持续的“while”循环? :)不觉得效率很高...

谢谢!

回答

0

回答第2个问题:Java未来接口只有两种方法:get()阻止异步请求,直到完成; isDone()检查结果是否准备好显示。不幸的是,他们之间没有桥梁 - 你无法收到一个事件或另一个触发你的事件,那个任务已经计算完毕。

Java 8介绍了名为CompletableFuture的mechanizm。

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html

从文档:

甲未来可明确地完成(其值设置和 状态),并且可以被用作CompletionStage,支持依赖 功能和操作该扳机完成后。

补充教程这里:http://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html

0

1)根据我的经验,异步功能直接使用。客户需要知道响应不是立即可用的,所以他们可以利用API等待一个响应。这导致...

2)轮询。不,它效率不高。但它是处理异步通信的常用方法。另一种方法是回调或基于事件的机制,但我没有看到在ReST API中实现的机制。

  • 请注意,HTTP旨在支持轮询。在异步操作的情况下,服务器将返回202(接受)。 202响应的主体可能包含指向另一个端点的链接,该链接可用于状态更新的轮询。状态检查端点将在异步处理完成时返回303(或同时为404)。
+0

对不起,我其实有点不清楚。因此,客户呼叫服务。服务业务逻辑组件异步并行地执行对后端系统的多个调用。这就是为什么我想知道是否应该有一个循环来检查所有异步调用已返回,然后再返回到调用客户端。 – user1340582

+0

听起来您可能正在寻找[ExecutorService](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html)。 – jaco0646