Java开发中RMI和webservice区别和应用领域

一、RMI和webservice区别和联系

       0. 首先,都是远程调用技术。

       1. RMI是在TCP协议上传递可序列化的java对象(使用Stream 技术(serialize)传输),只能用在JVM上,绑定语言:RMI的客户端和服务端都必须            是java;

       2. webservice是在http协议上传递xml文本文件,与语言和平台无关;

       3. RMI性能优于webservice;

       4. RMI多用于开发分布式应用系统;

        RMI为Java平台的分布式计算提供了一个简单而直接的模型。因为Java的RMI技术是基于Java平台的,所以它将Java平台的安全性和可移植性等优点带到了分布式计算中。RMI大大扩展Java的网络计算能力,它为编写基于分布式对象技术的企业级Internet/Intranet应用提供了强大的系统平台支持。

应用实例:当你开始在一个真正的网络上设计一个分布式应用系统时,以下几个相互冲突的设计问题会很清楚地反映出来:

        1.相互作用频繁的组件彼此间应该靠得更近些。

        2.某些组件只能在特定的机器或位置上运行。

        3.小组件增加了配置的灵活性,但它同时也增加了网络的拥塞。

        4.大组件减少了网络的拥塞,但它同时也减少了配置的灵活性。

        RMI的位置独立性极大地简化了将应用组件分布化的任务,使其能够达到最合适的执行效果。有了RMI支持,应用系统可以将互相关联的组件放到靠地比较近的机器上,甚至可以将它们放到同一台机器上或同一个进程中。将关联不是很紧密的组件进行拆分开发部署。而系统组件之间的通信由RMI来完成。

        当系统是由几个大组件构成时,如果把这几个组件做为一个整体部署在同一台机器上,会严重影响系统的整体性能,尤其是在机器的负载比较小的情况下将会更加糟糕。这时候我们可以将系统进行拆分并部署在多个机器上,而系统的几个组件之间的通信由RMI来完成,开发人员不用去管这些机器到底在哪。比如,可以将集中的数据库事务应用组件单独部署在另外的服务器上运行。将一个系统分解成一组不同的组件有很多好处,包括故障独立性,隔离各个部分所获得安全性,以及在不影响整体系统的前提下改变某个组件的功能和实现方法等。

        另外一种情况,比如系统的某一个组件只能在特定的机器或位置上运行(处于安全考虑等原因),这时候系统必须将此组件单独拆分出来部署,这样系统之间的通信也是由RMI来完成。

        此外,如果系统的某一个功能必须采用指定的语言(非java)才能完成,也必须对系统进行组件拆分,这时候系统之间的通信就不能使用RMI了,因为RMI只能用于java语言的系统,这时候可以考虑其他的系统集成方案,比如webservice技术,微软的DCOM来完成系统组件之间的通信。

        RMI是Java的特性,那么它必须基于JVM运行,也就是说RMI无法跨语言运行。而WebService就不同了,Soap是基于标准Http协议的,是一种与语言无关的字符级协议,所以它可以更好的实现异构系统的通信

        而webservice则多用于以HTTP协议传输数据的形式给客户提供可在公网上远程调用的能完成某种功能需求的程序接口。客户系统和提供服务的系统往往是不同编程语言的异构系统(当然也包括同种编程语言的异构系统), Webservice能够实现不同编程语言异构系统之间进行通信。并且以webservice的形式提供服务,可以很好的保障服务系统的安全性.

         web service提供的服务是基于web容器的,底层使用http协议,这都是基于一种请求应答的机制,是跨系统跨平台的。

         Web Servcie最主要的优点是: 即跨语言,跨平台的不同系统之间的通信。 现在企业内部的很多系统集成,企业和企业之间的系统集成的问题。Web Service是主要的解决方案(服务重用,降低开发成本,只开放自己愿意开放的服务)。l多用于为客户或用户提供远程的服务,比如天气预报服务,气象台服务器对各地客户端提供天气预报接口API;再比如违章系统查询接口等。

         参考: webservice的概念,webservice可以做什么?webservice什么时候用?

​​

二、JMS 与RMI

       Java消息服务 ( Java Messaging Service, JMS ) 是一种允许应用程序创建、发送、接受和读取消息的Java API 。

       据我个人的理解,JMS和RMI完全是两个不同应用场景中的技术,没有可比性。

      Java 消息服务(Java Message Service (JMS))是集成到 J2EE 中的一部分,它使得 MQ 服务可以为任何 J2EE 应用程序所用。即JMS是用于解决消息排队(MQ)问题的java-API,在实际应用中JMS+MQ服务器(有时也被称为面向消息的中间件(MOM))相结合来完成消息排队类型的应用程序开发。

          MQ 服务器是什么?用 MQ 的说法,消息只是一个字节流(这个字节流可以是一个 XML 文档、一个序列化的 Java 对象、一个文本字符串或甚至是一条空消息),对消息的解释留给应用程序域来做,MQ 服务器不对消息施加任何语义和结构限制。消息存储在MQ服务器的消息队列中,MQ 服务器允许您将消息加入到队列以及从队列中取走消息。