我有兴趣实现一些跨越机器的进程,即形成一个分布式程序。我想要分发的是这些进程提供的功能,而不是数据。
那么目前 Java 中分布式编程的规范是什么?
还是RMI吗?还是某种消息系统?
我最初认为 RMI 和一点 JMX 用于远程管理,但想知道当前的最佳实践是什么。似乎 RMI 总是“埋在”另一层下(例如 EJB 对吗?)
更新:
在回答和评论之后,似乎当前的趋势是使用消息传递系统?这不是在分布式设计中引入了“集中式”组件吗?
我有兴趣实现一些跨越机器的进程,即形成一个分布式程序。我想要分发的是这些进程提供的功能,而不是数据。
那么目前 Java 中分布式编程的规范是什么?
还是RMI吗?还是某种消息系统?
我最初认为 RMI 和一点 JMX 用于远程管理,但想知道当前的最佳实践是什么。似乎 RMI 总是“埋在”另一层下(例如 EJB 对吗?)
更新:
在回答和评论之后,似乎当前的趋势是使用消息传递系统?这不是在分布式设计中引入了“集中式”组件吗?
我认为 RMI 不再是要走的路,如果 RMI 适合您的任务,只需使用 EJB 即可,因为您将从应用程序服务器获得许多功能,例如安全/访问控制、事务管理、数据库管理等。那些在 RMI 中的人是痛苦和浪费时间的。
分布式编程的另一个选择是使用GridGain,这是一个强大的框架,您可以使用它来轻松地在商用机器集群上运行您的程序。同样,您可能会考虑使用Apache Hadoop
我会从 GridGain 开始,因为它非常易于安装,只需解压缩并运行,而且与您的应用程序集成也相对简单。
编辑
RMI 和消息系统有点不同,因为同步与异步通信的使用应取决于整个系统架构以及不同组件如何相互交互。例如,当服务调用需要很长时间才能完成时,例如进行批处理操作或归档大数据时,异步通信可能更合适。在这种情况下,服务客户端不持有系统资源(例如套接字和线程)
另一方面,当服务/功能需要很短的时间完成并且每个远程服务都依赖于前一个服务的结果时,同步通信可能更合适。
我最近使用Cajo项目在 Java 桌面 (Swing) 应用程序的几个实例之间进行远程处理。该项目已经有一段时间没有更新了,但它真的很容易使用,而且可以正常工作,而且几乎不用大惊小怪。
它是 RMI 的薄包装,所以它非常轻量级,而且速度非常快。
有关示例,请参阅文章“Cajo,用 Java 完成分布式编程的最简单方法”