在纯 Java 环境中 Web 服务和 RMI 的优缺点是啥?
Posted
技术标签:
【中文标题】在纯 Java 环境中 Web 服务和 RMI 的优缺点是啥?【英文标题】:What are the pros and cons of Web Services and RMI in a Java-only environment?在纯 Java 环境中 Web 服务和 RMI 的优缺点是什么? 【发布时间】:2010-09-12 08:34:02 【问题描述】:在开发分布式应用程序时,都是由同一家公司用 Java 编写的,您会选择 Web Services 还是 RMI?在性能、松散耦合、易用性等方面的优缺点是什么?有人会选择WS吗?您可以使用 RMI 构建面向服务的架构吗?
【问题讨论】:
【参考方案1】:我会试着这样想:
您是否希望在彼此之下运行独立的服务,并且这些服务可能会在未来某个时间被非 Java 应用程序访问?然后去网络服务。
您是否只想将应用程序的某些部分(注意单数)分散到多个服务器上?然后选择 RMI,您不必离开 Java 世界就能让一切紧密耦合在一起工作。
【讨论】:
考虑它的好方法。也不要忘记必须运行 RMI Registry 以查找服务所涉及的额外复杂性和麻烦。这至少是一个额外的端口开放,最坏的问题是托管该注册表。【参考方案2】:我会选择 WS。
WS/RMI 不太可能成为您的瓶颈。 为什么要在未来关闭其他可能的技术? 如果客户端/服务器上的类版本不同步,RMI 可能会出现问题。而且...我很可能会选择 REST 服务。
【讨论】:
在实际测量之前,您无法判断它是否不太可能。【参考方案3】:如果您不需要它(与非 Java 互操作),而您可能不需要,RMI 会更好;更少的代码、更少的配置、更少的带宽开销。
如果你害怕你需要它,一个选择是使用 EJB3;它使用 RMI,非常容易设置和部署,如果需要,还可以让您轻松将调用转换为 Web 服务。
无论你做什么,不要创造你自己的东西;坚持一个标准。
【讨论】:
应用程序可能不在支持 EJB 的环境中运行【参考方案4】:我的选择是:
标准 java 序列化 - 优点:恕我直言,提供最高性能,易于实现(我使用 Spring 将本地接口公开为远程接口);缺点:序列化在不同的 jvm 版本之间不起作用
二进制序列化(例如来自 jetty 的 hessian) - 优点:与 java 序列化的性能相同,并且可以在不同的 jvm 版本之间工作
WS:只有在不同平台java + .net之间需要互操作时才需要,否则就太有分量了。
【讨论】:
【参考方案5】:RMI 是一种很好的快速开发传输,但我建议不要在生产环境中使用它。序列化兼容性问题会使事情变得尴尬,您必须非常仔细地协调部署。
WebServices 是低效的,是的,但只是通过硬件来实现。或者,使用普通的、轻量级的 XML-over-HTTP,而不是全脂 SOAP/WSDL。
【讨论】:
以上是关于在纯 Java 环境中 Web 服务和 RMI 的优缺点是啥?的主要内容,如果未能解决你的问题,请参考以下文章
“java.rmi.Remote 无法解析为类型”是啥意思?
当您可以实现 Web 服务 (SOA/REST) 时,使用 RMI 实现 EJB 是不是仍然有用?