我是新的Web服务和RMI,我不知道这是更好的方式做不同的Web应用程序之间的远程调用,当这些应用程序都是用Java编写的,那就是当不同的编程语言并不重要(这将是优势WS的)。
虽然,一方面我想使用网络服务时,有一个性能开销(没有任何人有一些数字来证明?),在另一方面,它在我看来,web服务更松散耦合和可以用来实现一个更加面向服务的架构(SOA)(这是不可能的RMI,对吧?)。
虽然这是一个相当普遍的问题,你怎么看?
谢谢
我是新的Web服务和RMI,我不知道这是更好的方式做不同的Web应用程序之间的远程调用,当这些应用程序都是用Java编写的,那就是当不同的编程语言并不重要(这将是优势WS的)。
虽然,一方面我想使用网络服务时,有一个性能开销(没有任何人有一些数字来证明?),在另一方面,它在我看来,web服务更松散耦合和可以用来实现一个更加面向服务的架构(SOA)(这是不可能的RMI,对吧?)。
虽然这是一个相当普遍的问题,你怎么看?
谢谢
Web服务也允许松散耦合的架构。 有了RMI,你必须确保类定义保持同步的所有应用程序的情况下,这意味着你总是要在即使只有其中的一个改变(不一定在同一时间部署所有的人,但它是必要的,因为连续的UUID和诸如此类的东西经常)
此外,它是不是很可扩展性,如果你想有负载均衡,这可能是一个问题。
在我的脑海里RMI最适合小型,本地应用程序,是不是与互联网相关的,但仍需要进行去耦。 我用它来有一个处理电子通信的Java应用程序,我还是比较满意的结果。 对于需要在互联网上更复杂的部署和工作的其他应用程序,我宁可使用Web服务。
无论使用Web服务或更多的“原生”的方式依赖于良好环境。 如果你必须通过代理服务器或者一些公司的防火墙(S),Web服务是更容易的工作,因为他们只依靠HTTP。 RMI需要你在某些环境中打开另一个端口,您的应用程序,它可能是困难的(不是技术上的,虽然)...
如果你知道这个问题是不是出了问题,你应该考虑使用RMI。 SOA不依赖于技术,它主要依赖良好的服务设计。 如果你有一个EJB容器,你可以通过RMI调用会话bean和另外它们公开为Web服务,如果你真的需要,顺便说一句。
性能取决于你打算交换数据。 如果你想从一个应用程序到另一个发送复杂的对象网,它与RMI可能更快,因为它在一个二进制格式(通常)转移真实。 如果你有某种文本/ XML内容的反正,网络服务可等同甚至更快,因为那么你就不会需要任何东西转换(通信)。
HTH,
马丁
,超过RMI有利于WS的一件事是WS作品在其通常不受阻于防火墙HTTP端口80/443,可后面的NAT等RMI工作,这就需要你打开RMI端口比较复杂的底层网络协议,并且还如果客户端经NAT可能无法正常工作。 其次与RMI就会限制你的SLEF到JAVA,JAVA沟通,同时与Webservies没有这样的限制。 这是很容易调试WEBSERVICES通过线路作为数据是SOAP / HTTP,其可以通过嗅探调试工具能够容易地捕获。 我不知道一个简单的方法来做到这一点通过RMI。 除了RMI真的是很老,并没有得到重视了过去几年。 这是在天回大时,CORBA大,并且都RMI CORBA真的过时的技术。 最好的办法是REST风格的Web服务。
我与RMI和Web服务经验,反映上述你的猜测。 在一般情况下,RMI的性能远远超过Web服务,但接口规范明确的Web服务说明。
请注意,无论这些协议需要双方的应用成为Java。 我会倾向于使用Web服务时,我有谁是实现该接口的一个或多个外部合作伙伴,但RMI如果我是在连接的两端的控制。
RMI可能会向好的方向发展,如果你需要维护复杂的状态。
@马丁插口
“性能取决于你打算交换的数据。如果你想从一个应用程序到另一个发送复杂的对象网,这可能与RMI更快,因为它在一个二进制格式(通常)真实转移。如果你有某种反正文本/ XML的内容,网络服务可等同甚至更快,因为那么你就不会需要任何东西转换(通信)。”
据我所知道的性能问题,换句话说编组,在分解process.I我不知道这两个方面都是相同的BTW在分布式编程序列化,反序列化过程中,使不同,我不是在谈论这恰好在同一个JVM的过程中,这是关于你如何复制data.It要么是按值传递或reference.Binary格式传递相当于由这意味着复制对象到远程服务器binaries.If您有任何疑问,直到现在我很想听听值传递
什么是编组,解组或序列号,序列化方面的二进制格式和文本/ xml内容发送之间的区别?
我只是guessin.It不依赖于什么样的数据,你send.Whatever数据键入您发送它会在年底编组,解组过程中和一部分将在二进制文件正确发送?
欢呼声哈基
什么春季远程处理。 它结合了RMI的二进制格式REST状HTTP协议。 完全为我工作。
作为一个春天偏执和SOA的指数多年我建议Spring远程。 服务出口的这种味道会做的伎俩为RMI。
org.springframework.remoting.rmi.RmiServiceExporter
其他传输当然是可用的。 序列化的事情是非常易于管理,如果你版本的接口(端点)和DTO的明智和正确管理序列化的UUID。 我们postfix的“阿尔法”,“布拉沃”我们的接口和对象和增量,减量和重塑,其中,必要时。 我们还修复了系列化的UUID为1,确保变化是唯一的addative,否则我们从移动说,“布拉沃”到“查理”。 在企业设置中的所有易于管理。
对于春季远程处理(我猜你的意思是HTTP调用),两侧应使用Spring,如果是可以讨论的情况。
对于Java到Java应用RMI是一个很好的solutionö,JAX-RPC或JAX-WS的Java-to-Java的通信,如果客户不是你的控制之下,也可能转移到另一个平台应该避免。