-
1.1.1RPC名词解释
- 全称Remote Process Call,即远程过程调用
- rpc的实现包括服务的调用方和服务的提供方
-
过程
- 服务调用方发送RPC请求到服务提供方,服务提供方根据调用方提供的参数执行请求方法,将执行的结果返回给调用方,一次RPC调用完成
-
使用原因
- 单台服务器处理能力有限,RPC可提升系统处理能力和吞吐量,也是实现分布式计算的基础
-
1.1.2对象序列化
-
序列化原因
- 任何形式的数据都需要转换成二进制流在网络传输
-
概念
- 对象序列化-将对象转换为二进制流的过程
- 对象反序列化-将二进制流恢复为对象的过程
-
解决方案
- Google的Protocal Buffers
- Java内置的序列化方式
-
Hessian
- 引入二方包hession.jar
- JSON和XML
-
1.1.3基于TCP协议实现RPC
-
原理
- 基于java的反射机制和Socket API实现
- 方法的调用使用反射机制,消费者把需要调用的接口名称方法参数通过Socket通道传到服务端,服务端再通过反射机制调用对应的方法获取到值。然后再通过相同方式把结果返回给消费端
-
场景
- 服务消费者调用服务提供者的SayHelloService接口的sayHello()方法具体实现获取结果
-
关键代码
-
服务提供者
- String interfacename = SayHelloService.class.getName();//获取需要类名称
- Method method = SayHelloService.calss.getMethod("sayHello", String.class);//获取方法名称
- Socket socket = new Socket("127.0.0.1", 1234);//通过socket传输类,方法和参数等
ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
output.writeUTF(interfacename);//接口名称
output.writeUTF(method.getName());//方法名称
...
-
服务提供者
-
总结
- 真实环境中,多个客户端多个请求,服务端需要同时接收和处理,设计并发、路由、负载均衡等问题,以上代码无法满足。