Java RMI(Remote Method Invocation) 是jdk1.2 引入的一套Java自带 RPC实现方案。

实现过程如下:

一、远程服务端

  1. 编写远程接口继承java.rmi.Remote 接口
  2. 编写远程接口实现类并继承java.rmi.server.UnicastRemoteObject 类
  3. 编写远程启动类,实现指定注册服务端口并注册实例到rmi注册服务器上

二、客户端

  1. 编写本地接口继承java.rmi.Remote 接口,与远程服务端接口保持包名参数等一致。
  2. 使用Naming.lookup 返回与指定名称关联的远程对象的引用
  3. 使用引用对象进行调用远程方法

三、代码实现

3.1 远程接口 service.HelloService.java

该接口需要继承java.rmi.Remote 接口

package service;import java.rmi.Remote;
import java.rmi.RemoteException;public interface HelloService extends Remote {public String sayHello(String name)  throws RemoteException;
}

3.2 远程接口实现service.impl.HelloServiceImpl

该实现类需要实现远程接口以及继承java.rmi.server.UnicastRemoteObject 类,实现序列化。

package service.impl;import service.HelloService;import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;/*** @author huizi*/
public class HelloServiceImpl  extends UnicastRemoteObject implements HelloService {public HelloServiceImpl() throws RemoteException {}public String sayHello(String name)throws RemoteException {System.out.println("这是远程方法执行逻辑.........");return name+"执行了远程方法 SayHello";}
}

3.3 远程启动类(重点)

在该类中需要指定注册服务器的端口,以及将需要进行注册的实例进行注册操作。

package app;import service.HelloService;
import service.impl.HelloServiceImpl;import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;public class ServiceMain {public static void main(String[] args) throws RemoteException, AlreadyBoundException, MalformedURLException {//1 启动RMI注册服务,指定端口号LocateRegistry.createRegistry(9999);//2,创建要被访问的远程对象实例HelloService service = new HelloServiceImpl();//3,把远程对象实例注册到RMI注册服务器上Naming.bind("rmi://127.0.0.1:9999/HelloService",service);System.out.println("服务端启动运行中....");}
}

3.4 客户端接口

package service;import java.rmi.Remote;
import java.rmi.RemoteException;public interface HelloService extends Remote {public String sayHello(String name)  throws RemoteException;
}

3.5 客户端调用类

在该类中使用Naming.lookup("rmi://127.0.0.1:9999/HelloService") 获取远程对象引用,并使用客户端接口类进行远程调用。

package app;import service.HelloService;import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;public class ClientMain {public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {HelloService helloService = (HelloService) Naming.lookup("rmi://127.0.0.1:9999/HelloService");String resultStr = helloService.sayHello("PC客户端 ");System.out.println(resultStr);}
}

四、启动运行 先启动远程短,在启动客户端调用,打印如下:

Dubbo(一) 使用Java RMI 实现RPC(远程过程调用)相关推荐

  1. 一文告诉你 Java RMI 和 RPC 的区别

    转载自  一文告诉你 Java RMI 和 RPC 的区别 RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用 ...

  2. 一文告诉你 Java RMI 和 RPC 的区别!

    RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务. 一次RPC调用的过程大概有10步: 1.执行客户 ...

  3. Java RMI 入门

    Java RMI 入门 如何通信 实战 完整代码   Java RMI 指 JDK 内置的关于实现远程方法调用(Remote Method Invocation)的 API.这些 API 位于包 ja ...

  4. [转载] 远程方法调用(RMI)与远程过程调用(RPC)

    参考链接: Java中的远程方法调用RMI 一.RMI 远程方法调用 RMI(Remote Method Invocation)远程方法调用.能够让在客户端Java虚拟机上的对象像调用本地对象一样调用 ...

  5. 远程方法调用(RMI)与远程过程调用(RPC)

    一.RMI 远程方法调用 RMI(Remote Method Invocation)远程方法调用.能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法.使用 ...

  6. spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security

    spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...

  7. RPC远程过程调用之 RMI实现

    1)RMI(remote method invocation)是java原生支持的远程调用,RMI采用JRMP(java RemoteMessageing Protocol)作为通信协议.可以认为是纯 ...

  8. SOA、RMI、RPC、Rest、RestFul、Soap、WebService 详解

    目录 SOA 是什么 SOA 的应用场景 SOA 主要的使用场景 数据总线是什么 SOA 最显著的优势 SOA 与微服务架构的区别 WebService 是什么 SOAP WSDL UDDI 什么是 ...

  9. SOA、微服务结构、RMI、RPC、Rest、RestFul、Soap、WebService详解

    SOA.RMI.RPC.Rest.RestFul.Soap.WebService详解 目录 一.SOA是什么? SOA的应用场景: SOA主要的使用场景:   ​ 数据总线是什么? SOA最显著的优势 ...

最新文章

  1. 0402互联网新闻 | 首批进口游戏版号下放,网易腾讯获批;“少年得到”完成数千万元A轮融资...
  2. 信息学奥赛C++语言: 求小数的某一位
  3. Linux服务器挂死案例分析
  4. JAVA 调用Web Service的方法(转)
  5. QT编译静态库与动态库
  6. Nginx的安装、启动、停止命令
  7. 智能优化算法:蝙蝠算法-附代码
  8. 1. JDK版本变迁和各版本新特性
  9. 普通路由器连接光猫一体机的配置教程(以水星MW300R路由器,移动吉比特GS3202光猫一体机为例,可突破专供定制路由限制)
  10. 我的第一个app:电信宽带密码一键获取客户端
  11. 【转载】python做图像的傅里叶变换——二维傅里叶变换
  12. camera中文版软件 ip_摄像头监控软件|IP Camera Viewer V 3.0.4.0 官方版-完美软件下载...
  13. 数电模电基础(1)分压电路
  14. VTN国际品牌会员俱乐部 聚集高净值圈层人群 引领高品质生活方式
  15. C语言把csv文件转xls,Excel怎么批量将CSV格式转换为xlsx或xls格式?VBA、宏、软件?...
  16. 挂yy协议的服务器,yy协议挂机软件
  17. vue实现PC端和移动端的界面切换
  18. 从失业到年薪百万,被你忽略的“一技之长”正在膨胀!
  19. jQuery入门(一)--jQuery中的选择器
  20. java将字节转十六进制,Java代码将字节转换为十六进制

热门文章

  1. Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法
  2. 面向对象的特点,封装性,继承性,多态性!
  3. 浅谈Hibernate批量操作
  4. ubuntun opencv 编译成64_19、OpenCV图像平滑处理
  5. JDK的下载、安装和配置
  6. delphi tclientsocket接收不到返回数据_NB-IOT联网及模块UDP数据传输过程
  7. 洛谷P1073 最优贸易
  8. enum should not be used as an identifier since it is a reserved keyword from source level 1.5 on
  9. Git Submodule新漏洞已修复
  10. Hibernate4.3基础知识2