分布式架构探索 - 1. RPC框架之Java原生RMI
2018-03-14 10:53
465 查看
1. 什么是RPC
RPC(Remote Procedure Call)即远程过程调用,指的是不同机器间系统方法的调用,这和
同机器动态链接库(DLL)有点类似,只不过RPC是不同机器,通过网络通信来访问远程的资源。
2. Java RMI技术
RMI(Remote Method Invocation)即远程方法调用,是Java原生的RPC技术。
* 使用了原生的序列化机制(序列化对象实现java.io.Serializable接口)
* 底层通信基于BIO(Block IO)实现的Socket来完成
* 性能较差
例子:
2-1) 首先,定义远程对外服务接口
// 必须继承Remote接口 public interface HelloService extends Remote { String sayHello(String someOne) throws RemoteException; }
2-2) 远程接口的实现
// UnicastRemoteObject定义了服务调用方与提供方对象实例,并建立一对一连接 public class HelloServiceImpl extends UnicastRemoteObject implements HelloService { protected HelloServiceImpl() throws RemoteException { super(); } @Override public String sayHello(String someOne) throws RemoteException { return "hello," + someOne; } }
2-3) 服务端远程服务启动
// 创建和注册服务 public class ServiceMain { public static void main(String[] args) throws Exception { LocateRegistry.createRegistry(8801); //指定通讯端口,防止被防火墙拦截 RMISocketFactory.setSocketFactory(new CustomerSocketFactory()); HelloService helloService = new HelloServiceImpl(); Naming.bind("rmi://localhost:8801/helloService", helloService); System.out.println("ServiceMain provide RPC service now."); } }
/** * 指定通讯端口,防止被防火墙拦截 * Created by KG on 2017/3/8. */ public class CustomerSocketFactory extends RMISocketFactory { @Override public Socket createSocket(String host, int port) throws IOException { return new Socket(host, port); } @Override public ServerSocket createServerSocket(int port) throws IOException { if (port == 0) { port = 8501; } System.out.println("rmi notify port:" + port); return new ServerSocket(port); } }
2-4) 客户端调用RMI服务
public class ClientMain { public static void main(String[] args) throws Exception { //服务引入 HelloService helloService = (HelloService) Naming.lookup("rmi://localhost:8801/helloService"); //调用远程方法 System.out.println("RMI服务器返回的结果是 " + helloService.sayHello("Master HaKu")); } }
程序运行结果:
RMI服务器返回的结果是 hello,Master HaKu
相关文章推荐
- 分布式架构探索 - 2. WebService RPC框架之Apache CXF
- jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro dubbo zookeeper redis kafka app服务
- Java高并发高性能分布式框架从无到有微服务架构设计
- Java高并发高性能分布式框架从无到有微服务架构设计
- jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro
- jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro dubbo zookeeper redis kafka app服务
- 【Java安全技术探索之路系列:Java可扩展安全架构】之二:JCA(一):JCA架构介绍
- 【Java安全技术探索之路系列:Java可扩展安全架构】之五:JCE(一):JCE架构介绍
- 深入探索 高效的Java异常处理框架。
- 【Java安全技术探索之路系列:Java可扩展安全架构】之二十:SASL(一):SASL架构介绍.md
- Java Web 框架:我对架构中分层的理解
- 5个强大的Java分布式缓存框架推荐
- java简单搭建分布式架构
- [置顶] 【java】SSM架构改造为dubbo分布式架构
- 分布式系统架构2017java架构师互联网架构师视频教程java实战教程
- 以简求快 Java快速开发框架LML总体架构预览
- Java互联网架构师视频课程 分布式系统架构 Dubbo ActiveMQ Netty
- 关于可扩展的web架构设计的探索-框架结构的描述文件
- java分布式服务框架Dubbo的介绍与使用
- 一种互联网应用的分布式架构模式微服务应用框架的实现(gradle,dubbo,zookeeper,springmmvc)