Spring @Async是否可以与客户端 - 服务器通信一起使用?

时间:2014-05-14 15:19:29

标签: java spring asynchronous

我已经阅读过关于@Async的Spring的文档,我不清楚这是否只有在调用者和被调用的服务位于同一个JVM中时才会起作用。

我在Tomcat和Swing应用程序上部署了一个Spring Web应用程序,使用Spring HttpInvoker进行这两者之间的通信。我想从客户端调用服务器服务并异步返回结果。我是否必须构建其他内容,或者我可以使用@Async吗?

在同一个JVM中测试时,它可以工作。用2个JVM测试时,我得到了

  

java.io.NotSerializableException:java.util.concurrent.FutureTask

在服务器上,这意味着我不能将此机制与两个JVM一起使用。

有什么想法吗?

在我发现隐藏@Async的许多教程中,似乎都没有涉及远程调用和返回值的情况。

1 个答案:

答案 0 :(得分:1)

两个JVM之间绝对没有关系。

您正在使用向HTTP服务器发送HTTP请求的客户端,然后HTTP服务器以HTTP响应进行响应。这就是它的全部内容。

Spring的@Async注释旨在表明方法应该在异步上下文中运行。这与HTTP客户端完全没有关系。这是在Web应用程序中调用的方法。

您获得的错误与您调用方法的方式以及如何尝试向客户端发送HTTP响应有关。当你说它适用于一个JVM而不是两个JVM时,你几乎将苹果与橙子进行了比较。 JVM并不重要。重要的是,在一种情况下,您正在调用该方法。在另一种情况下,您有一个客户端/服务器设置,其中服务器无法将某些实体序列化为HTTP响应。