Spring 似乎正在弃用其 RMI:
从 Spring Framework 5.3 开始,出于安全原因和更广泛的行业支持,现已弃用对多种远程技术的支持。支持基础设施将从 Spring Framework 的下一个主要版本中删除。
但我找不到任何简单的等效替代品。 REST 听起来像是简单事物的最佳选择,但它不涵盖任务长时间运行和/或需要连续结果流的解决方案。因此,使用 REST 来实现会非常痛苦。有些人考虑通过 REST 将任务提交到队列,然后可能单独查询结果 - 但这听起来有点矫枉过正,并且将过去可用的非常简单的任务所需的工作量大幅增加。
是否有一个好的替代方案或一些使用未弃用技术并且正式可用的框架来处理上述问题?当某些东西被弃用时,通常表明有更好的东西可用,这将是更好的解决方案,那么有人可以帮助我教育我它是什么吗?
我在使用 Hessian 时遇到了同样的问题。我认为你仍然可以自己实现。 Spring 仅弃用自己与 RMI 技术的集成。
我认为还有很多其他技术,但信息很明确。 Spring 不会进行任何自己的集成。
我可以想到这些替代方案:
基于 spring 文档: https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#remoting-web-services
我可以说,这些替代方案可能会保留在未来的版本中,但我没有尝试它们:
我觉得Spring Web Services是Spring最喜欢的。 我们将看到 6.0 文档何时完成。
我能够给出答案:https://stackoverflow.com/a/79126986/17205238
TLDR;注册一个 Bean 并手动启动 JMX rmi 连接器,根据需要传递环境变量(https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/tutorial/security.html在我的示例中通过方法 getJmxEnvironment())
@Bean
Registry rmiRegistry() throws Exception {
var jmxPort = getJmxPort(); //get your port from a property? jmx.port
var registry = LocateRegistry.createRegistry(jmxPort);
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://0.0.0.0:"+jmxPort+"/jndi/rmi://127.0.0.1:"+jmxPort+"/jmxrmi");
JMXConnectorServer srvr = JMXConnectorServerFactory.newJMXConnectorServer(url, getJmxEnvironment(), mbs);
srvr.start();
return registry;
}
希望有帮助