【问题标题】:Is Java RMI a good alternative to Axis2 SOAP?Java RMI 是 Axis2 SOAP 的良好替代品吗?
【发布时间】:2013-02-18 20:47:58
【问题描述】:

如果服务器和客户端都只是 Java,那么与 Axis2 实现的 SOAP 相比,RMI 会更有效(带宽和延迟)吗?我知道 RMI 近几年已经不受欢迎了,但这并不意味着它不能使用。

那么 XML-RPC 怎么样?

【问题讨论】:

  • RMI 是基于 Java 序列化的,所以效率应该很高。
  • RMI 会更快,但它缺少某些功能,如服务器级安全性 - 但是如果使用两个内部企业系统,则可以忽略这一点。另一个问题可能是贷款平衡功能。 Webservices 有自己的开销,例如 Marshalling / Unmarshalling,但鉴于现在服务器功能更强大,这不应该是任何问题。从长远来看,Web 服务使您的企业更加面向 SOA。因此,如果您需要将服务扩展到其他方,这将有助于更好的设计
  • @user1428716 你的意思是“负载平衡功能”,而 RMI 没有,尽管 RMI/IIOP 在使用合适的 ORB 时可以。
  • 安全性非常好。我阅读了有关 REST 的信息,但并没有看到它那么好,对它的性能有什么想法吗?我很快就会阅读链接,但如果我可以使用 JSON 并处理无状态情况,并且它真的比 Axis2 更快,那可能是有希望的。

标签: java jakarta-ee axis2 rmi xml-rpc


【解决方案1】:

RMI 有一些有趣的特性并且相当快,但也有一些问题:

  1. 您必须确保要序列化的所有内容都实现了 Serializable。
  2. 您必须确保服务器和客户端具有完全相同版本的所有 Serializable 类,并且部署在完全相同的时间,并且您序列化的每个类(包括可序列化对象持有的字段)都使用 serialVersionUID适当地。否则你将陷入痛苦的世界(阅读:“系列版本不匹配”)。
  3. 您必须确保您序列化的类不持有对最终持有对大对象的引用的对象的引用,否则您会对通过网络传输的数据包的大小感到非常惊讶。
  4. 如果您决定从 Java 以外的任何方式访问服务,则必须编写另一个远程访问层。
  5. 没有#5。

实际上,这些天我几乎总是推荐 REST 服务。创建小型 Java 对象并使用 Gson 或 Jackson 或其他东西来来回整理数据非常容易,相比之下,RMI 的优势微乎其微。

【讨论】:

  • (2) 不正确。请参阅对象序列化规范中的Versioning of Serialized Objects 章节。如果 (2) 正确,则该章将不存在。
  • 很好的答案,tnx!如果 (2) 真的不正确,当然我可以将所有内容保存在 Java 中,那么 (3) 根本就不是问题。毕竟,为了构建 WebService,我们必须管理传递数据,并且任何其他自动获取对象并抛出它们而无需显式转换代码的解决方案都可能发生同样的问题。
  • 我会阅读上面的代码并考虑一下REST和JSON,也许这可以是RMI和SOAP之间的中间解决方案。
  • @EJP,我知道(2)在技术上并不总是正确的。然而,它实际上经常是正确的(由于第三方库、编写不佳的代码、意外引用等),它也可能如此。我以前的一个客户使用 EJB 和 DTO 并设置了 serialVersionUID。好吧,事实证明一个没有设置,我们的一位开发人员重新排序了几个字段(应该是无害的,对吧?)。由于数十个依赖项目都因串行版本不匹配而失败并且必须重新构建和重新部署,我们的测试环境已经关闭了一整天。情况不妙。
  • 好吧,与其让您的服务器停机这么久,您还可以恢复到经过测试的修订/基线,一旦恢复工作,您就可以将它与您的最新代码进行比较。最好找出导致事件的原因,同时您可以在服务器恢复工作的情况下进行。
猜你喜欢
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多