一、什么是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远程方法调用的更多相关文章

  1. RMI远程方法调用

    RMI远程方法调用:适用于 客户端 调用 服务器 内的方法:(Kotlin 语言编写) 如果业务为二个服务器之间的通信,还是得用消息队列的形式,因为RMI 不适合 双向 调用 下面介绍RMI 的使用方 ...

  2. Java RMI远程方法调用

    RMI(远程接口调用) 1. RMI的原理: RMI系统结构,在客户端和服务器端都有几层结构. 方法调用从客户对象经占位程序(Stub).远程引用层(Remote Reference Layer)和传 ...

  3. 简单实现Java的RMI——远程方法调用

    一.RMI简介: 说到RMI就不得不说RPC了. RPC:(Remote Procedure Call),远程过程调用. RMI(Remote Method Invocation),远程方法调用. R ...

  4. Java RMI 远程方法调用

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  5. 【Java Web开发学习】远程方法调用RMI

    Java RMI 远程方法调用Remote Method Invocation 转载:http://www.cnblogs.com/yangchongxing/p/9078061.html 1.创建远 ...

  6. [转]Java远程方法调用

    Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远 ...

  7. SpringBoot里使用RMI进行远程方法调用

    一.Java RMI定义 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程 ...

  8. RMI远端方法调用

    一.RMI介绍 RMI(Remote Method Invocation),RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信.必须在jdk1.1以上,RMI用到的类:java. ...

  9. XML-RPC远程方法调用

    一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列 ...

随机推荐

  1. H264之基础篇

    1. H264 基础概念 在 H.264/AVC 视频编码标准中,整个系统框架划分为如下两个层面: 视频编码层(VCL):VCL 数据即被压缩编码后的视频数据序列,负责有效表示视频数据的内容: 网络抽 ...

  2. 转载 筛子算法之golang实现求素数解析

    package main import "fmt" // Send the sequence 2, 3, 4, ... to channel 'ch'. func generate ...

  3. react源码之render

    1.最近学习react源码,刚刚入门,看了render的原理,到了fiberRoot的创建 如图:

  4. Json+Ajax相关

    Ajax前戏之json: 1.什么是json? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 2.json对象和JavaScript ...

  5. js 中实现 汉字按拼音排序

    let arr = ["贵州省", "江苏省", "江西省", "浙江省", "四川省", &quo ...

  6. SQL学习(五)多表关联-join

    在实际工作中会用到多表联查,此时需要用到关键字JOIN 一.inner join(内连接) 至少有一个匹配时返回行,只返回两个表中连接字段相等的行 如: select * from ticket in ...

  7. 12 mysql性能抖动

    12 mysql性能抖动 sql语句为什么变”慢”了 在介绍WAL机制时,innodb在处理更新语句的时候,只做了写日志这一个磁盘操作,就是redo log,在更新内存写完redo log之后,就返回 ...

  8. Using NodeLists

    Understanding a NodeList object and its relatives, NamedNodeMap and HTMLCollection, is critical to a ...

  9. 利用netsh命令设置IP地址/DNS服务器地址

    一.设置IP地址 1. 自动获取IP地址: netsh interface ip set address [name=]"本地连接" [source=]dhcp 2. 手动设置IP ...

  10. spring-boot集成5:集成jrebel实现热加载

    Why Jrebel? 使用jrebel可以方便的实现spring-boot项目的热部署,直接reload更改的class,无需重启,提升开发效率. 1.安装jrebel插件 在idea中安装jreb ...