RMI、RPC和JMS的比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjx86320/article/details/51790050

      

       RMI

 

       Java RMI 指的是远程方法调用 (Remote MethodInvocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。

      RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。

       这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。

       RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用WebService或者公用对象请求代理体系(CORBA)来实现。

       使用代表:EJB

 

===============================================================================================================

 

       RPC

       

        RPC(Remote ProcedureCall Protocol)——

远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了

解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

        使用代表:Dubbo

 

===============================================================================================================


        JMS

 

       Java 消息服务 (Java Messaging Service, JMS ) 是一种允许应用程序创建、发送、接受和读取消息的Java API 。JMS 在其中扮演的角色与JDBC 很相似,正如JDBC 提供了一套用于访问各种不同关系数据库的公共API,JMS 也提供了独立于特定厂商的企业消息系统访问方式。       

       使用JMS 的应用程序被称为JMS 客户端,处理消息路由与传递的消息系统被称为JMS Provider,而JMS 应用则是由多个JMS 客户端和一个JMS Provider 构成的业务系统。发送消息的JMS 客户端被称为生产者(producer),而接收消息的JMS 客户端则被称为消费者(consumer)。同一JMS 客户端既可以是生产者也可以是消费者。

       JMS 的编程过程很简单,概括为:应用程序A 发送一条消息到消息服务器(也就是JMS Provider)的某个目得地(Destination),然后消息服务器把消息转发给应用程序B。因为应用程序A 和应用程序B 没有直接的代码关连,所以两者实现了解偶。


===============================================================================================================

                

       RMIRPC

 

        1.返回值上:RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型。而 RPC 不支持对象的概念,传送到 RPC 服务的消息由外部数据表示 (ExternalData Representation,XDR) 语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。只有由 XDR 定义的数据类型才能被传递, RPC 不允许传递对象。可以说 RMI 是面向对象方式的 JavaRPC 。

        2.通信语言

        RMI:仅支持Java语言

        RPC:可以跨语言访问

        3.错误处理

        不支持对象,无法在编译器检查错误,只能在运行期检查。

        4.方法调用       

        在方法调用上,RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。

        在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。

 

 

===============================================================================================================

 

       RMIJMS

 

        1.传输方式上

       JMS 与 RMI 的区别在于,采用 JMS 服务,对象是在物理上被异步从网络的某个 JVM 上直接移动到另一个 JVM 上。

       RMI 对象是绑定在本地 JVM 中,只有函数参数和返回值是通过网络传送的。

        2.方法调用上

       RMI一般都是同步的,也就是说,当client调用Server的一个方法的时候,需要等到对方的返回,才能继续执行client端,这个过程调用本地方法感觉上是一样的,这也是RMI的一个特点。

       JMS 一般只是一个点发出一个MessageMessage Server,发出之后一般不会关心谁用了这个message。一般RMI的应用是紧耦合,JMS的应用相对来说是松散耦合应用。




猜你喜欢

转载自blog.csdn.net/zjx86320/article/details/51790050