我已经阅读过关于@Async的Spring的文档,我不清楚这是否只有在调用者和被调用的服务位于同一个JVM中时才会起作用。
我在Tomcat和Swing应用程序上部署了一个Spring Web应用程序,使用Spring HttpInvoker进行这两者之间的通信。我想从客户端调用服务器服务并异步返回结果。我是否必须构建其他内容,或者我可以使用@Async吗?
在同一个JVM中测试时,它可以工作。用2个JVM测试时,我得到了
java.io.NotSerializableException:java.util.concurrent.FutureTask
在服务器上,这意味着我不能将此机制与两个JVM一起使用。
有什么想法吗?
在我发现隐藏@Async的许多教程中,似乎都没有涉及远程调用和返回值的情况。
答案 0 :(得分:1)
两个JVM之间绝对没有关系。
您正在使用向HTTP服务器发送HTTP请求的客户端,然后HTTP服务器以HTTP响应进行响应。这就是它的全部内容。
Spring的@Async
注释旨在表明方法应该在异步上下文中运行。这与HTTP客户端完全没有关系。这是在Web应用程序中调用的方法。
您获得的错误与您调用方法的方式以及如何尝试向客户端发送HTTP响应有关。当你说它适用于一个JVM而不是两个JVM时,你几乎将苹果与橙子进行了比较。 JVM并不重要。重要的是,在一种情况下,您正在调用该方法。在另一种情况下,您有一个客户端/服务器设置,其中服务器无法将某些实体序列化为HTTP响应。