请问Java RMI的意义是什么?[已关闭]

人们为什么使用RMI,或者我应该什么时候使用RMI?我在甲骨文的网站上阅读了那些关于RMI的教程。但它没有提供足够的实际例子。

根据我的理解,软件的模块应该尽可能地“不相关和分离”。在某种程度上,RMI似乎是高耦合的一个例子。为什么这不是一个糟糕的编码实践?我认为客户端应该只触发指令,而对象的所有实际操作都是由服务器完成的。


答案 1

你真的不应该在你今天构建的任何应用程序中使用RMI,基本上是出于你刚刚布局的原因。

在某些情况下(深入研究遗留或“企业”应用程序),您别无选择。

但是,如果要启动新项目,则其他选项包括:

REST + JSON over HTTP

与远程服务通信的事实标准。它的最大优点是重量轻,易于掌握概念。

从理论上讲,它应该比RMI需要更多的工作,因为您必须手动制作可用的URL,每个URL中接受的动词等。在实践中,我会说RMI的样板并不能真正帮助任何人。

坚持使用java,泽西岛是一个出色的库,可以编写自己的RESTful Web服务。

如果你想要一个包含电池的Java的RESTful Web服务解决方案,Yammer的好人Dropwizard为你提供了一个完整的服务器和框架,可以插入你的业务逻辑,并提供日志记录,数据库连接,序列化,请求路由,甚至开箱即用的指标。

肥皂

以前用于与远程服务通信的标准。除非你有理由使用它,否则我会坚持使用REST。

节俭

Thrift将创建一个客户端和一个服务器存根,基本上完成大部分工作。通信采用高效的二进制协议。它在Java世界中越来越受欢迎,因为它被“大数据”领域的许多开源项目使用。例如,Cassandra,HBase(切换到Avro)。Scrooge是一个Twitter项目,旨在为scala创建惯用的节俭存根。

阿卡演员

Akka是实现Scala和Java的Actor模型的框架。包括服务间通信的规定,并处理了引擎盖下的许多细节。我


根据您的需求,有些会比其他的更合适。


答案 2

你是对的,RMI是服务提供者和服务消费者之间过于紧密耦合的一个例子。而且它比乍一看更糟糕:你永远不知道你可能会被推送到客户端的哪个异常,从而导致掩盖所发生的真实错误。RMI,以及类似的EJB,都是过去的技术,过去相信“透明分布对象”的妄想。ClassNotFoundException

今天的远程服务基于与RMI方法完全相反的方法:REST和JSON。


推荐