RMI远程方法调用

合集下载

naming.lookup方法作用-概述说明以及解释

naming.lookup方法作用-概述说明以及解释

naming.lookup方法作用-概述说明以及解释1.引言1.1 概述在分布式系统中,naming.lookup方法是一个非常重要的函数。

它的作用是通过名称查找远程对象的引用,并将其返回给调用者。

在分布式环境中,通常会有许多远程对象存在,而这些对象通常由命名服务管理,而不是直接通过IP地址和端口号来进行访问。

这就需要使用naming.lookup方法来获取对远程对象的引用。

通过使用naming.lookup方法,分布式系统可以更加灵活和可扩展。

调用方不需要知道远程对象的具体位置,只需要知道对应的名称即可。

这样可以实现更好的模块化和解耦,使得系统更易于维护和扩展。

本文将深入探讨naming.lookup方法的定义、作用,以及使用该方法时需要注意的事项,同时也会通过实际示例演示该方法的应用场景,最后对naming.lookup方法的重要性进行总结,并展望未来对其的应用和发展。

json{"1.2 文章结构":{"本文将分为三个部分来探讨naming.lookup方法的作用和重要性。

首先在引言部分将对文章的整体内容进行概述,然后在正文部分详细介绍naming.lookup方法的定义、作用以及使用注意事项,最后通过示例应用来展示其在实际场景中的应用。

在结论部分将总结naming.lookup方法的重要性并展望未来对其的应用和发展。

"}}1.3 目的naming.lookup方法作为Java中的一个重要功能,其目的主要是为了实现分布式系统中的命名服务。

通过使用naming.lookup方法,可以方便地在网络上查找和获取远程对象的引用,从而实现远程方法调用和远程对象交互。

通过本文的分析和讨论,旨在帮助读者深入了解naming.lookup方法的定义、作用和应用场景,进而提高对分布式系统中命名服务的理解和应用能力。

同时,也旨在引导读者正确地使用naming.lookup方法,避免出现常见的错误和注意事项,从而更加高效地开发和运维分布式系统。

接口分类(http接口、api接口、RPC接口、RMI、webservice、Restfu。。。

接口分类(http接口、api接口、RPC接口、RMI、webservice、Restfu。。。

接⼝分类(http接⼝、api接⼝、RPC接⼝、RMI、webservice、Restfu。

在这之前⼀定要好好理解⼀下接⼝的含义,我觉得在这⼀类中接⼝理解成规则很恰当。

http接⼝:基于HTTP协议的开发接⼝.这个并不能排除没有使⽤其他的协议。

api接⼝:API(Application Programming Interface)应⽤程序编程接⼝,应⽤也包括⽹络应⽤程序,就像api⽂档基本上就是使⽤说明书,API接⼝可以简单理解成“应⽤程序使⽤接⼝”。

RPC接⼝:Remote Procedure Calls 远程过程调⽤ (RPC) 是⼀种协议,程序可使⽤这种协议向⽹络中的另⼀台计算机上的程序请求服务。

由于使⽤ RPC 的程序不必了解⽀持通信的⽹络协议的情况,因此 RPC 提⾼了程序的互操作性。

在 RPC 中,发出请求的程序是客户程序,⽽提供服务的程序是服务器。

RPC(远程过程调⽤)是⼀项⼴泛⽤于⽀持分布式应⽤程序(不同组件分布在不同计算机上的应⽤程序)的技术。

RPC 的主要⽬的是为组件提供⼀种相互通信的⽅式,使这些组件之间能够相互发出请求并传递这些请求的结果。

没有语⾔限制。

RMI:RMI(Remote Method Invocation,远程⽅法调⽤)RMI是针对于java语⾔的, RMI 允许您使⽤Java编写分布式对象Webservice接⼝:Webservice是系统对外的接⼝,⽐如你要从别的⽹站或服务器上获取资源或信息,别⼈肯定不会把数据库共享给你,他只能给你提供⼀个他们写好的⽅法来获取数据,你引⽤他提供的接⼝就能使⽤他写好的⽅法,从⽽达到数据共享的⽬的。

RESTful :简称 REST,是描述了⼀个架构样式的⽹络系统,其核⼼是⾯向资源,REST专门针对⽹络应⽤设计和开发⽅式,以降低开发的复杂性,提⾼系统的可伸缩性。

REST提出设计概念和准则为:1.⽹络上的所有事物都可以被抽象为资源(resource)2.每⼀个资源都有唯⼀的资源标识(resource identifier),对资源的操作不会改变这些标识3.所有的操作都是⽆状态的关于RPC和RMI的区别,各类博客有很多,我就不说了。

jrmp原理

jrmp原理

jrmp原理
JRMP(JavaRemoteMethodProtocol)是一种Java远程方法协议,它是基于TCP/IP之上,RMI协议之下的一种线路层协议。

它用于在不同的JVM之间进行远程方法调用,也就是RMI (RemoteMethodInvocation)。

JRMP协议的工作原理如下:
服务端创建一个实现了Remote接口的远程对象,并将其导出到RMI注册中心(Registry),指定一个名称和端口号。

客户端通过RMI注册中心的名称和端口号,查找到服务端的远程对象,并获取其存根(Stub)对象,这是一个实现了Remote接口的本地代理对象。

客户端通过存根对象,调用服务端的远程方法,存根对象会将方法名和参数封装成一个JRMP消息,并通过TCP连接发送给服务端。

服务端接收到JRMP消息后,根据方法名和参数,找到对应的远程对象,并调用其方法,将返回值封装成一个JRMP消息,并通过TCP 连接发送给客户端。

客户端接收到JRMP消息后,解析出返回值,并返回给调用者。

JRMP协议的优点和缺点如下:
优点:JRMP协议是为Java定制的,能够支持Java的对象序列化和反序列化,以及Java的异常处理机制,使得远程方法调用更加方便和高效。

缺点:JRMP协议是与Java绑定的,不能与其他语言的远程方法
调用协议兼容,如CORBA的IIOP协议,这限制了其跨平台的能力。

浅谈JavaRMI

浅谈JavaRMI
p ca e t s : a k g e t
i ot j v m irg s r. : p m r a a . .e i ty } ip r a a r isr e . m ot j v a .e vr : .
p b i l s e f c T m x e d n c s R m t O j c i l m n s u lc ca s Pr e t ie e tn sU ia t eo eb e t m ee t p
它们分别对应的是根 (tb和干 ( ee o) su ) s ltn . k
i p r a a n t } m o t j v. e . : ip r a a r . m o t j v mi . :
RI M 全部的宗 旨就是可能简化远程接口对象的使用 。我 们客户程序中要做的唯一一件额外事情是查找从服务器取 回
确 计 时 服 务
/ P re t ie j v / ef cT m .a a / W e i p e e t t o f t e P r e t ie r m t b e t /h m lm na in o h e fc Tm eo e o jc
a k ̄ e p c te t: s
器端的传输层传递回客户端,再向上 经传输层和远程调用层 返回。最后 ,占位程序获得返回值 。 而要完成 以下调用过程 ,需要 有 以下几个 步骤 : 1 、创建一个远程接 口
式计算将 工作量分散到多个 J v a a虚拟机上。
2 实现远程对象( 务器端程序 ) 、 服 3 、生成 占位程 序和骨干网( 务器端 程序 ) 服 4 、编写服务 器程序 5 、编写客户程序
其主要功能是 :使用户能访 问在另一主机上的 Jv aa对象,并 远程调用其方法。程序的对象是客户 ,而远程对象是服务器。 远程对象也可以是另一个远程服务对象 的客户 。通过使用持 续性 ( 串行化和解 串行化) ,本地对象和原始类型值可以作为

分布式系统进程通信

分布式系统进程通信

3、MOM
面向消息的中间件,Message-oriented Middleware; 或称为消息队列系统Message Queuing System。
使用消息队列的松耦合通信的4种组合方式
2-26 消息队列
Basic interface to a queue in a message-queuing system
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Client procedure calls client stub in normal way Client stub builds message, calls local OS Client's OS sends message to remote OS Remote OS gives message to server stub Server stub unpacks parameters, calls server Server does work, returns result to the server stub Server stub packs it in message, calls local OS Server's OS sends message to client's OS Client's OS gives message to client stub Client stub unpacks result, returns to client
三、远程对象调用
1、分布式对象 2、将客户绑定到对象 3、远程方法调用(RMI)
1、Distributed Objects
对象:状态、方法、接口 对象
状态:对象的性质(Properties)的取值。性质包括属 性Attributes(一元)和关系Relations(二元)。 方法:对状态的操作。 接口:公开的方法。

java分布式实现原理

java分布式实现原理

java分布式实现原理Java分布式实现原理分布式系统是指由多台计算机组成的系统,这些计算机通过网络进行通信和协调,共同完成复杂的任务。

Java是一种广泛使用的编程语言,它提供了一些工具和机制来实现分布式系统。

1. 网络通信:Java提供了Socket编程接口,可以通过套接字来在不同计算机之间进行网络通信。

通过建立输入和输出流,可以实现数据的传输和交换。

这样,在分布式系统中的不同计算机之间可以进行消息的发送和接收。

2. 远程方法调用(RPC):Java的RMI(远程方法调用)机制使得在不同计算机之间进行方法的调用变得简单。

通过定义接口和实现类,并通过RMI机制发布和获取远程对象,可以方便地在分布式系统中进行方法调用。

3. 分布式数据存储:Java提供了多种机制来进行分布式数据存储。

例如,Java的数据库连接池可以使用多个数据库连接,以实现对大型数据库的分布式访问。

此外,Java还提供了分布式缓存系统,如Redis和Memcached,用于在分布式系统中高效地存储和获取数据。

4. 分布式任务调度:Java的定时任务调度框架,如Quartz和Spring Scheduler,可以帮助实现分布式系统中的任务调度。

这些框架可以根据预定的时间表和条件触发任务的执行,从而实现任务的分布式调度和执行。

5. 分布式事务处理:Java的分布式事务处理框架,如Java Transaction API(JTA)和Java Transaction Service(JTS),可以帮助实现多个系统之间的事务管理。

这些框架提供了事务的协调和控制机制,确保分布式系统中的事务得以正确执行和提交。

总之,Java提供了许多工具和机制来实现分布式系统。

通过网络通信、远程方法调用、分布式数据存储、分布式任务调度和分布式事务处理等功能,可以将多个计算机连接成一个整体,协同工作,实现复杂任务的完成。

J2EE常见术语及缩写

J2EE常见术语及缩写RMIRmote Method Invocation(远程方法调用)用于Java平台中的远程方法调用。

它具有分布式垃圾收集、可自动下载类文件等功能。

位于java.rmi包中。

注意:RMI只能在Java平台中使用。

通过RMI传输的参数必须可以序列化CORBACommon Object Request Broker Architecture(公共对象请求代理体系结构)用于实现独立于平台及编程语言的分布式应用ORBObject Request Broker(对象请求代理)负责具体的网络通信,是构建分布式应用的基础。

STUB与SKELETON存根与骨架无论是RMI还是ORB,其实现本质都是采用了代理模式。

其中存根为客户端使用的代理,拥有通过网络访问远程对象的能力;骨架为远程对象的代理,用来接受存根的调用,并返回结果。

附:在CORBA和JAVA 5中也支持动态调用,即存根不是必须存在的。

RMI-IIOPRemote Method Invocation over the Internet-ORB Protocol(基于互联网的对象请求代理协议实现的远程方法调用)J2EE和EJB事实上的网络通信标准,基于RMI,同时又兼容CORBA,使得EJB组件可以被Java 之外的客户端调用。

位于javax.rmi包中。

话题1:为何J2EE要兼容CORBACORBA是OMG(对象管理组织)推出的成功的分布式对象通信标准,为了占领企业级市场,EJB必须考虑和遗留系统的集成,以及为异构系统提供服务,这都需要采用更加通用的CORBA,而不是只能在Java平台下使用的RMI。

话题2:引入CORBA之后面临的问题1,分布式垃圾收集:并非所有支持CORBA的语言都有垃圾收集机制。

2,窄化(Narrowing):当通过RMI或RMI-IIOP获取一远程对象时,实际上获取的是其存根(Stub)。

在RMI中,会自动下载此存根;而CORBA没有这个机制,必须用额外的方法解决(其实是通过javax.rmi.PortableRemoteObject的narrow方法解决的)。

什么是远程过程调用

什么是远程过程调⽤什么是远程过程调⽤我们经常需要设计⼀个分布式系统,并通过分布式系统,实现程序跨计算机运⾏。

例如,为了建⽴⼀个⼤型的事务处理系统,需要⼀个专门服务器负责事务逻辑对象,另外专门设计⼀个服务器展⽰逻辑对象,诸如此类。

所有这些服务器相互之间都需要通信(见图14-1)。

为了这样的⼀个模型能正常⼯作,⼀台计算机的代码需要访问另⼀台计算机。

例如,位于服务器的程序需要在⼀个Web页⾯上显⽰⼀个订单列表,在这种情形下,它需要访问业务对象服务器上的程序,通过它读取订单列表,业务对象服务器⼜要访问数据库服务器。

当⼀台计算机上的程序调⽤另⼀台计算机的程序时,就称之为⼀次远程过程调⽤(Remote Procedure Call,RPC)。

为了执⾏⼀个远程过程调⽤,需要掌握以下内容:●被调⽤的代码驻留在哪⾥?当需要执⾏某个代码时,⾸先需要知道该代码在哪⾥?●调⽤这些代码需要参数吗?如果需要,参数的类型是什么?例如,如果我们想调⽤⼀个远程过程执⾏两个数的加法运算,则必须要把这两个数传递给这个过程。

●调⽤过程需要返回运算结果吗?如果需要,则返回值的类型是什么?例如,两个数相加的过程要返回第三个数,即它们的和。

图 14‑1此外,我们还需要解决⼤量的⽹络问题,把需要从⼀台计算机传送给另⼀台计算机的数据进⾏打包,以及其他很多问题。

正是由于这个原因,⼈们开发了许多RPC协议。

协议就是⼀组规则,有了这组规则,不同的应⽤程序甚⾄不同的计算机都可以相互通信。

例如,Internet上的计算机就是⽤TCP(传输控制协议)和IP(⽹际协议)两个协议进⾏通信的,因为它们规定了Internet上的数据传输过程和计算机寻址⽅法。

这些协议规定如何为远程计算机提供地址,如何把需要传送给远程过程的数据打包,如何读取响应信号,如何启动远程调⽤,如何进⾏纠错处理,以及处理所有与多个计算机之间通信有关的细节问题(这样的RPC协议通常都是建⽴在其他协议的基础上,例如,RPC协议规定在⽹络传输中必须使⽤TCP/IP协议)。

java rpc 方法

java rpc 方法===========一、介绍----RPC,即远程过程调用(Remote Procedure Call),是一种常见的编程范式,允许在两个不同的地方调用相同的数据结构和控制流程。

在Java环境中,使用RPC可以实现组件之间的解耦,提高系统的可扩展性和可维护性。

本篇文档将介绍Java中常见的RPC方法及其实现。

二、几种常见的Java RPC方法-------------1. **Java RMI(远程方法调用)**:Java RMI是Java提供的用于在不同Java虚拟机(JVM)之间进行通信的一种机制。

它允许远程对象调用在客户端代码中定义的方法。

2. **HTTP/RESTful API**:使用HTTP协议进行通信,通过定义一系列的HTTP方法(如GET、POST、PUT、DELETE等)来实现RPC调用。

Java中常用的框架如Spring MVC、Jersey等可以方便地实现RESTful API。

3. **gRPC**:gRPC是Google开发的一种高性能、开源的RPC框架,它支持多种语言,包括Java。

通过gRPC,可以在不同的系统之间进行高性能、高可靠性的通信。

4. **Thrift**:Thrift是一种跨语言的远程服务调用(RPC)框架,它支持多种编程语言,包括Java。

使用Thrift,可以很方便地定义服务接口,并生成相应的客户端和服务器代码。

5. **Dubbo**:Dubbo是阿里巴巴开源的一个高性能、轻量级的RPC框架,它支持多种通信协议和传输层协议,如HTTP/HTTPS、RMI、Kafka等,同时也支持负载均衡和容错。

三、Java RPC方法实现示例------------### 1. Java RMI示例首先,我们需要定义一个远程接口:```javainterface RemoteService extends Remote {void remoteMethod();}```接着,我们需要实现这个接口,并在服务器端注册这个远程对象:```javapublic class RemoteServiceImpl extends UnicastRemoteObject implements RemoteService {public RemoteServiceImpl() throws RemoteException { // 默认端口为1099,也可指定其他端口号}public void remoteMethod() {// 方法实现代码}}```在客户端,我们可以创建这个远程对象的引用并调用方法:```javaRemoteService remoteService = new RemoteServiceImpl(); // 创建远程对象引用remoteService.remoteMethod(); // 调用远程方法```### 2. HTTP/RESTful API示例(使用Spring MVC)首先,我们需要定义一个RESTful接口:```java@RestControllerpublic class RemoteServiceController {@GetMapping("/remoteMethod")public String remoteMethod() {// 方法实现代码return "远程方法调用成功";}}```然后,我们需要在前端发起HTTP请求来调用这个接口。

RMI学习+RMI反序列化

RMI学习+RMI反序列化RMI(Remote Method Invocation,远程⽅法调⽤),能调⽤远程虚拟机的对象的⽅法。

协议:Java本⾝对RMI规范的实现默认使⽤的是JRMP协议Weblogic中对RMI规范的实现使⽤T3协议。

nternet Inter-ORB协议(IIOP):基于CORBA实现的跨语⾔协议组成及实现1.服务器定义的可供远程调⽤的接⼝,需要继承Remote ,接⼝中定义了⼀个hello⽅法public interface rmidemo extends Remote { public String hello() throws RemoteException; }2.接⼝实现类,其中有⼀个私有的构造⽅法,和实现的接⼝中的hello⽅法public class RemoteHelloWorld extends UnicastRemoteObjectimplements rmidemo{ protected RemoteHelloWorld() throws RemoteException { System.out.println("构造⽅法");} public String hello() throws RemoteException{ System.out.println("hello⽅法被调⽤"); return "hello,world";}}1. 注册中⼼(也在服务端,开启⼀个rmi,也在服务端),其中利⽤Registry 创建了⼀个本地1099端⼝的rmi服务,服务绑定了RemoteHelloWorld对象,并将名i设置为了hello。

)public class servet{ public static void main(String[] args) throws RemoteException { rmidemo hello = new RemoteHelloWorld();//创建远程对象 Registry registry = LocateRegistry.createRegistry(1099);//创建注册表 registry.rebind("hello",hello);//将远程对象注册到注册表⾥⾯,并且设置值为hello } }1. 客户端(调⽤远程rmi的接⼝,实现接⼝的功能(这⾥⽤接⼝对象实现))public class clientdemo { public static void main(String[] args) throws RemoteException, NotBoundException { Registry registry = LocateRegistry.getRegistry("localhost", 1099);//获取远程主机对象 rmidemo hello = (rmidemo) registry.lookup("hello"); // 利⽤注册表的代理去查询远程注册表中名为hello的对象 System.out.println(hello.hello()); }// 调⽤远程⽅法并输出结果 }RMI反序列化前提1. 服务端存在利⽤链2. 服务端能上传⼀个object,传输的数据为序列化的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java RMI 技术原理(远程方法调用)Java RMI指的是远程方法调用。

它是一种机制,能够让在某个Java虚拟机上的对象调用另一个Java虚拟机中的对象上的方法。

可以用此方法调用的任何对象必须实现该远程接口。

Java RMI不是什么新技术(JDK1.1就有了),但却是是非常重要的底层技术。

大名鼎鼎的EJB都是建立在RMI基础之上的,现在还有一些开源的远程调用组件,其底层技术也是RMI。

在这个大力吹捧Web Service、SOA的年代,不是每个应用都应该选用笨拙的Web Service组件来实现,有人通过对比测试后,认为RMI是最简单的,在一些小的应用中是最合适的。

在Java中,只要一个类extends了
java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。

注意:extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用。

同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根stub”,而服务器端本身已存在的远程对象则称之为“骨架skeleton”。

其实此时的Stub 是客户端的一个代理,用于与服务器端的通信,而Skeleton也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。

从客户对象经存根(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传输层,向上穿过远程
调用层和骨架(Skeleton),到达服务器对象。

Stub扮演着远程服务器对象的代理的角色,使该对象可被客户激活。

远程引用层处理语义、管理单一或多重对象的通信,决定调用发往一个服务器还是多个。

传输层管理实际的连接,并且追踪可以接受方法调用的远程对象。

服务器端的骨架(Skeleton)完成对服务器对象实际的方法调用,并获取返回值。

返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。

最后,Stub获得返回值。

要完成以上步骤需要有以下几个步骤:
1、生成一个远程接口
2、实现远程对象(服务器端程序)
3、生成Stub和Skeleton(服务器端程序)
4、编写服务器程序
5、编写客户程序
6、注册远程对象
7、启动远程对象
由于有RMI系统的支持,我们写RMI应用程序时只需要继承相关类,实现相关接口就可以了。

也就是说,我们只需要定义接口、接口实现、客户端程序和服务端程序就可以了。

用一个例子来说明整个过程。

定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常。

远程的接口的实现
创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。

客户端测试,在客户端调用远程对象上的远程方法,并返回结果。

运行结果:
1.启动Server端
2.启动Client端
从感觉上,觉得有点像在调用本地的方法,实际上是在远程对象上执行。

相关文档
最新文档