其实这个类似于java RMI
IPCServer建立,
public class IPCServer{
public static final int IPC_PORT=9999;
public static final long IPC_VER=88877;
public static void main(String [] args)
{
try {
//创建实现接口的功能实例
IPCQueryStatusImpl is=new IPCQueryStatusImpl();
//创建server对象,静态创建,参数包括实现的功能对象,监听地址,端口号,hadoop配置实例
Server server = RPC.getServer(is,"0.0.0.0",IPC_PORT,new Configuration);//服务的创建,发布
server.start(); //服务器开始服务函数
server.stop();//服务器结束服务函数
}
}
}
IPCClient的创建
public class IPCQueryClient{
public static void main(String [] args)
{
try{
//得到socket地址包括ip和端口号;
InetSocketAddress addr=new InetSocketAddress("localhost",
IPCQueryServer.IPC_PORT);
//类似于RMI的Naming.lookup()创建了代理类,初始化远程的接口,包括接口的类对象,服务版本号,socket地址,配置对象等
IPCQUeryStatus q=(IPCQueryStatus)RPC.getProxy(IPCQueryStatus.class,
IPCQueryServer.IPC_VER,addr,new Configuration);
//然后通过代理类来实现远程方法的调用;
IPCFilStatus status=q.getFileStatus("/testIPC");
RPC.stopProxy(q);
}
}
}
其实和RMI没有太大区别,就多了个stop,start等,还有对于Server和Client的版本配对的问题其他差不多;
RMI使用的是Naming来注册绑定创建使用等,使用的是Naming.loolup()和Naming.bind(),Naming.registry()等;hadoop ipc使用的是RPC.getServer()注册创建,使用RPC.getProxy()来创建代理类,来本地调用远程方法;