Java APi 之 RMI远程方法调用
一、什么是RPC
RPC全称是remote procedure call,即远程过程调用。它是一种协议,用于从远程计算机上请求服务。
例如有两台服务器A和B,A上的应用想要调用B上应用的方法,但是他们在不同的服务器,所以不能通过内存调用的方式,所以我们理所当然地去考虑通过网络来实现函数调用。RPC也就是能够实现A上的应用能够直接调用B上应用的方法的协议。
注:RPC和HTTP的不同点主要是在于针对使用场景而形成的不同特性,RPC协议主要应用于服务器的内部,也针对服务而形成如错误重试、服务发现等特性。
二、什么是RMI
RMI全称remote method invocation,即远程方法调用,是Java对RPC的一种客户端/服务端的实现,基于一个注册表Registry,如图
服务端创建并发布远程对象,注册表处理远程对象的映射地址;客户端通过映射地址从注册表获取远程对象,调用相应的方法。
三、RMI使用步骤
1、定义远程对象接口
2、实现远程对象
3、实现服务端
4、实现客户端
四、代码示例
定义远程对象接口Hello
import java.rmi.Remote;
import java.rmi.RemoteException; /**
* 远程对象接口定义
*
* @author lay
* @date 2018/8/29 13:23
*/
public interface Hello extends Remote { /**
* sayHello方法定义
*
* @return
* @throws RemoteException
*/
String sayHello() throws RemoteException;
}
实现服务端,这里包括实现远程对象,发布和注册映射
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject; /**
* RMI服务端
*
* @author lay
* @date 2018/8/29 13:24
*/
public class Server implements Hello { /**
* 实现远程接口方法
*
* @return 字符串
* @throws RemoteException
*/
@Override
public String sayHello() throws RemoteException {
return "hello RMI";
} public static void main(String[] args) throws RemoteException, AlreadyBoundException {
// 获取远程接口的远程对象
Server server = new Server();
// 发布远程对象到RMI
Hello hello = (Hello) UnicastRemoteObject.exportObject(server, 8080);
// 获取注册表
Registry registry = LocateRegistry.createRegistry(8080);
// 绑定映射地址
registry.bind("hello", hello);
System.out.printf("服务端启动成功");
}
}
客户端实现
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry; /**
* RMI客户端
*
* @author lay
* @date 2018/8/29 13:33
*/
public class Client { public static void main(String[] args) throws RemoteException, NotBoundException {
// 获取注册表
Registry registry = LocateRegistry.getRegistry(8080);
// 查找远程对象
Hello hello = (Hello) registry.lookup("hello");
// 调用方法
String content = hello.sayHello();
System.out.printf("content:" + content);
}
}
启动服务端,客户端调用的输出结果为:
content:hello RMI
参考文章:
https://docs.oracle.com/javase/7/docs/technotes/guides/rmi/hello/hello-world.html#register
Java APi 之 RMI远程方法调用的更多相关文章
- RMI远程方法调用
RMI远程方法调用:适用于 客户端 调用 服务器 内的方法:(Kotlin 语言编写) 如果业务为二个服务器之间的通信,还是得用消息队列的形式,因为RMI 不适合 双向 调用 下面介绍RMI 的使用方 ...
- Java RMI远程方法调用
RMI(远程接口调用) 1. RMI的原理: RMI系统结构,在客户端和服务器端都有几层结构. 方法调用从客户对象经占位程序(Stub).远程引用层(Remote Reference Layer)和传 ...
- 简单实现Java的RMI——远程方法调用
一.RMI简介: 说到RMI就不得不说RPC了. RPC:(Remote Procedure Call),远程过程调用. RMI(Remote Method Invocation),远程方法调用. R ...
- Java RMI 远程方法调用
Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...
- 【Java Web开发学习】远程方法调用RMI
Java RMI 远程方法调用Remote Method Invocation 转载:http://www.cnblogs.com/yangchongxing/p/9078061.html 1.创建远 ...
- [转]Java远程方法调用
Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远 ...
- SpringBoot里使用RMI进行远程方法调用
一.Java RMI定义 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程 ...
- RMI远端方法调用
一.RMI介绍 RMI(Remote Method Invocation),RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信.必须在jdk1.1以上,RMI用到的类:java. ...
- XML-RPC远程方法调用
一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列 ...
随机推荐
- 安装指定版本的Ionic或Cordova
安装ionic 及 cordova npm install -g cordova ionic更新命令 npm update -g cordova ionic安装特定版本 npm install -g ...
- 使用 Itext 生成PDF字节数组(文件流不落地)
package com.ulic.gis.customerCenter.controller; import java.io.ByteArrayOutputStream; import java.io ...
- 执行docker run命令时报错Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
一.解决办法: 修改host 二.步骤如下 2.1 安装dig工具 sudo apt-get install dnsutils -y (ubuntu下的安装方法) 2.2 找到registry-1. ...
- OpenCV学习笔记(14)——轮廓的性质
提取一些经常使用的对象特征 1.长宽比 边界矩形的宽高比 x,y,w,h = cv2.boundingRect(cnt) a ...
- 升级日志sdfsdfsdfsdfsdfdsf
升级日志sdfsdfsdfsdfsdfdsf 升级日志小书匠 版本号 新功能 修改
- 手机APP缓存的获取和清理功能的实现
package com.loaderman.appcachedemo; import android.content.pm.IPackageDataObserver; import android.c ...
- 在smarty模板中截取指定长度的字符串
在smarty模板中截取指定长度的字符串,可使用truncate这个插件. 用法: {{$data.value|truncate:28:'...'}} 28个字节14个字数输出,多余部分输出...,一 ...
- OO ALV 后台运行时错误:Control Framework: Fatal error - GUI cannot be reached
这个错误的原因,是GUI容器依赖GUI的存在,因为它是在后台运行,没有GUI,因此控制错误. 可以通过做一些编码绕过这个. * ALV Grid DATA: R_GRID TYPE REF TO CL ...
- 2019.12.04 ADT on eclipse 配置篇
今天看JerryWang的简书博客https://www.jianshu.com/p/74ad8e4bbc49 ,SAP GUI 和ADT是互为补充的关系,有很多SAP新出的技术都没有办法在GUI上开 ...
- 从 ssh private key 中重新生成 public key
Use the -y option to ssh-keygen: ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub From the 'man ...