org.apache.hadoop.ipc.RPC的阅读和改写
/首先开头注释说协议是一个java接口,所有的接口都必须返回8种基本类型、String,Writable种的一种。
那么下面果然给出了一个RpcInvoker里面有一个空方法
public Writable call(Server server, String protocol,
Writable rpcRequest, long receiveTime) throws Exception ;
返回的就是Writable的对象,而call内的参数也很容易理解,调用的服务器,协议,请求,收到返回的时长。
下面的大块代码是一个Builder内部类,这个类的作用是构造一个RPC 服务器,无非是ip,端口号etc。
下面是构建了一个抽象的Server类,继承了org.apache.hadoop.ipc.Server ,我们前面的文章有介绍 http://li5jun.com/article/348.html
这个抽象类只有
public abstract Writable call(RPC.RpcKind rpcKind, String protocol,
Writable param, long receiveTime) throws Exception;
这一个函数没有实现,所以我们完全可以继承这个server用来直接明了的实现了自己的函数。
new RPC.Builder(new Configuration()).setProtocol(IServer.class)
.setInstance(server).setBindAddress(InetAddress.getLocalHost().getHostAddress()).setPort(rpcServerPort)
.setNumHandlers(slaveNum * 2).build();
这样也可以直接构造一个,协议protocol就是自己写的一个接口。里面歇一歇空的方法名即可,然后再具体实现在一个server里,setInstance就是这样一个实例。一个实现了IServer接口的实例。需要构造一个server基本要设定如下一些选项:
return RPC.getProtocolEngine(this.protocol, this.conf).getServer(this.protocol, this.instance, this.bindAddress, this.port, this.numHandlers, this.numReaders, this.queueSizePerHandler, this.verbose, this.conf, this.secretManager, this.portRangeConfig);
协议,实例,绑定地址,处理handler数目等