Spring Async RMI Call

是否可以异步调用Java RMI? 我希望我的RMI调用立即返回,并且服务器在任务完成后调用回调。

我目前正在使用Spring框架的RMI支持,我在spring找不到任何描述它的文档,我怀疑我需要自己实现它。 如果可能,请提供示例。

提前致谢!

据我所知,RMI是同步的,不支持回调。

JMS是进行异步调用的Java EE方法。 如果您使用的是Spring,它将是一个消息驱动的POJO。

另外一个地方,因为你已经在使用Spring,所以要么是Spring Batch ,要么是Spring Integration 。 在我自己写之前,我会尝试其中任何一个。

但如果这不适合你,你的怀疑是正确的 – 你必须自己实施它。

我没有看到Spring批处理和Spring Integration,但是没有改变RMI协议,实现异步调用的唯一方法是跨越一个等待服务器结果的新线程,这不是真正的异步调用。

真正的异步调用的方法是:

  1. 使用NIO实现RMI。
  2. 调用代理时,将请求放在NIO选择器上,并立即将结果返回给调用者。
  3. 每个请求都必须具有唯一的请求ID,并且当具有该id的响应从服务器到达时,应该解决正确的未来。

这种异步RMI只有一种实现(我不确定它是否已准备好生产)。

这是序列图的一个很好的解释