标签:
RPC=remote procedure call
计算机A可以跟调用本地方法一样调用远程计算机B的方法,省略了显示编码远程调用的细节
过程:user相当于一个client,当client调用远程方法时,user-stub将接口方法参数封装起来,通过特定的协议规范打包成rpc的协议数据由C端的RPCRuntime送到S端的RPCRuntime,s端接收到后,还是按照特定的协议规范解析,然后调用本地方法,得到结果后返回给Client
RPC调用:
同步调用:客户端等待调用执行完并返回结果
异步调用:客户端调用后不必等待执行结果返回,但依然可以通过回调通知等方式获取返回结果
若客户端不关心调用返回结果,则变成单向异步调用,单向调用不必返回结果
区别:是否等待服务端执行完并返回结果
RpcProxy相当于user,RpcInvoker相当于user-stub,RpcConnector相当于RPCruntime,反之亦同
RpcInvoker:负责编码调用信息和发送调用请求到服务方并等待调用结果返回(Client)
负责调用服务端接口的具体实现并返回调用结果(Server)
例子:
export导出接口:
RpcServer server = new ...;
DemoService demo = new ...;
DemoService demo2 = new ...;
server.export(DemoService.class,demo,options)
server.export("demo2",DemoService.class,demo,options)
import导入接口:
RpcClient client = new ...;
DemoService demo = client.refer(DemoService.class);
demo.hi("rpc hello");
协议压缩:
类似于HTTP有header信息和body信息,body信息就是可序列化编码,比如Xml,json
异常处理:
1.RPC调用不一定执行
2.RPC框架本身会抛出异常
3.RPC速度(ms)肯定比本地调用(ns)慢
经验:
因为RPC的调用过程会有网络消耗的,只有在计算任务时间远大于RPC固有消耗时间的情况下,才比较适用
标签:
原文地址:http://www.cnblogs.com/horseLing/p/4861845.html