java分布式框架rmi_分布式架构探索 - 1. RPC框架之Java原生RMI

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 extendsRemote {

String sayHello(String someOne)throwsRemoteException;

}

2-2) 远程接口的实现

//UnicastRemoteObject定义了服务调用方与提供方对象实例,并建立一对一连接

public class HelloServiceImpl extends UnicastRemoteObject implementsHelloService {protected HelloServiceImpl() throwsRemoteException {super();

}

@Overridepublic String sayHello(String someOne) throwsRemoteException {return "hello," +someOne;

}

}

2-3) 服务端远程服务启动

//创建和注册服务

public classServiceMain {public static void main(String[] args) throwsException {

LocateRegistry.createRegistry(8801);//指定通讯端口,防止被防火墙拦截

RMISocketFactory.setSocketFactory(newCustomerSocketFactory());

HelloService helloService= newHelloServiceImpl();

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 extendsRMISocketFactory {

@Overridepublic Socket createSocket(String host, int port) throwsIOException {return newSocket(host, port);

}

@Overridepublic ServerSocket createServerSocket(int port) throwsIOException {if (port == 0) {

port= 8501;

}

System.out.println("rmi notify port:" +port);return newServerSocket(port);

}

}

2-4) 客户端调用RMI服务

public classClientMain {public static void main(String[] args) throwsException {//服务引入

HelloService helloService = (HelloService) Naming.lookup("rmi://localhost:8801/helloService");//调用远程方法

System.out.println("RMI服务器返回的结果是 " + helloService.sayHello("Master HaKu"));

}

}

程序运行结果:

RMI服务器返回的结果是 hello,Master HaKu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值