Dubbo(一) 使用Java RMI 实现RPC(远程过程调用)
Java RMI(Remote Method Invocation) 是jdk1.2 引入的一套Java自带 RPC实现方案。
实现过程如下:
一、远程服务端
- 编写远程接口继承java.rmi.Remote 接口
- 编写远程接口实现类并继承java.rmi.server.UnicastRemoteObject 类
- 编写远程启动类,实现指定注册服务端口并注册实例到rmi注册服务器上
二、客户端
- 编写本地接口继承java.rmi.Remote 接口,与远程服务端接口保持包名参数等一致。
- 使用Naming.lookup 返回与指定名称关联的远程对象的引用
- 使用引用对象进行调用远程方法
三、代码实现
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(远程过程调用)相关推荐
- 一文告诉你 Java RMI 和 RPC 的区别
转载自 一文告诉你 Java RMI 和 RPC 的区别 RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用 ...
- 一文告诉你 Java RMI 和 RPC 的区别!
RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务. 一次RPC调用的过程大概有10步: 1.执行客户 ...
- Java RMI 入门
Java RMI 入门 如何通信 实战 完整代码 Java RMI 指 JDK 内置的关于实现远程方法调用(Remote Method Invocation)的 API.这些 API 位于包 ja ...
- [转载] 远程方法调用(RMI)与远程过程调用(RPC)
参考链接: Java中的远程方法调用RMI 一.RMI 远程方法调用 RMI(Remote Method Invocation)远程方法调用.能够让在客户端Java虚拟机上的对象像调用本地对象一样调用 ...
- 远程方法调用(RMI)与远程过程调用(RPC)
一.RMI 远程方法调用 RMI(Remote Method Invocation)远程方法调用.能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法.使用 ...
- spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security
spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...
- RPC远程过程调用之 RMI实现
1)RMI(remote method invocation)是java原生支持的远程调用,RMI采用JRMP(java RemoteMessageing Protocol)作为通信协议.可以认为是纯 ...
- SOA、RMI、RPC、Rest、RestFul、Soap、WebService 详解
目录 SOA 是什么 SOA 的应用场景 SOA 主要的使用场景 数据总线是什么 SOA 最显著的优势 SOA 与微服务架构的区别 WebService 是什么 SOAP WSDL UDDI 什么是 ...
- SOA、微服务结构、RMI、RPC、Rest、RestFul、Soap、WebService详解
SOA.RMI.RPC.Rest.RestFul.Soap.WebService详解 目录 一.SOA是什么? SOA的应用场景: SOA主要的使用场景: 数据总线是什么? SOA最显著的优势 ...
最新文章
- 0402互联网新闻 | 首批进口游戏版号下放,网易腾讯获批;“少年得到”完成数千万元A轮融资...
- 信息学奥赛C++语言: 求小数的某一位
- Linux服务器挂死案例分析
- JAVA 调用Web Service的方法(转)
- QT编译静态库与动态库
- Nginx的安装、启动、停止命令
- 智能优化算法:蝙蝠算法-附代码
- 1. JDK版本变迁和各版本新特性
- 普通路由器连接光猫一体机的配置教程(以水星MW300R路由器,移动吉比特GS3202光猫一体机为例,可突破专供定制路由限制)
- 我的第一个app:电信宽带密码一键获取客户端
- 【转载】python做图像的傅里叶变换——二维傅里叶变换
- camera中文版软件 ip_摄像头监控软件|IP Camera Viewer V 3.0.4.0 官方版-完美软件下载...
- 数电模电基础(1)分压电路
- VTN国际品牌会员俱乐部 聚集高净值圈层人群 引领高品质生活方式
- C语言把csv文件转xls,Excel怎么批量将CSV格式转换为xlsx或xls格式?VBA、宏、软件?...
- 挂yy协议的服务器,yy协议挂机软件
- vue实现PC端和移动端的界面切换
- 从失业到年薪百万,被你忽略的“一技之长”正在膨胀!
- jQuery入门(一)--jQuery中的选择器
- java将字节转十六进制,Java代码将字节转换为十六进制
热门文章
- Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法
- 面向对象的特点,封装性,继承性,多态性!
- 浅谈Hibernate批量操作
- ubuntun opencv 编译成64_19、OpenCV图像平滑处理
- JDK的下载、安装和配置
- delphi tclientsocket接收不到返回数据_NB-IOT联网及模块UDP数据传输过程
- 洛谷P1073 最优贸易
- enum should not be used as an identifier since it is a reserved keyword from source level 1.5 on
- Git Submodule新漏洞已修复
- Hibernate4.3基础知识2