一、什么是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. 【gradle】【maven】gradle 转 maven pom.xml

    在 对应的build.gradle 文件中加入以下代码,这里我是放在gradle文件的最开始位置: 这里是定义了一个task writeNewPom 来完成的. apply plugin: 'mave ...

  2. 警告(alert)、确认(confirm)

    我们在访问网站的时候,有时会突然弹出一个小窗口,上面写着一段提示信息文字.如果你不点击“确定”,就不能对网页做任何操作,这个小窗口就是使用alert实现的. 语法: alert(字符串或变量);注:a ...

  3. 查重复出现的字段 SQL

    select * from a where (select count(b.abc) from b where b.abc=a.abc)>1 一般treeview datagridview 都要 ...

  4. electron关于无边框窗口无法拖拽移动以及点击事件失效的问题

    为了使窗口无边框,使得在某些时候让项目看起来更美观,所以在创建窗口的时候通过设置 frame 属性的值为 false 来创建无边框窗口.但是无边框窗口会产生无法移动的问题,对于这个问题我们可以在渲染进 ...

  5. LC 562. Longest Line of Consecutive One in Matrix

    Given a 01 matrix M, find the longest line of consecutive one in the matrix. The line could be horiz ...

  6. 发布机制-A/B 测试:百科

    ylbtech-发布机制-A/B 测试:百科 AB测试是为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组(目标人群)随机的访问 ...

  7. OGG-01877 Missing explicit accessrule for server collector

    OGG-01877 Missing explicit accessrule for server collector Table of Contents 1. OGG-01877 1 OGG-0187 ...

  8. Hibernate3核心API-SchemaExport类

  9. laravel多主多从配置示例

    'mysql' => [ 'write' => [ [ 'host' => '192.168.1.180', 'username' => '', 'password' => ...

  10. Java 多线程爬虫及分布式爬虫架构

    这是 Java 爬虫系列博文的第五篇,在上一篇 Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器 中,我们简单的聊反爬虫策略和反反爬虫方法,主要针对的是 IP 被封及其对应办法.前面几篇文章我们把 ...