repc针对接口进行实现和调用
定义接口:
package hadoopRpcinfo;
public interface HadoopServiceInfo {
public static final long versionID=1L;
public String getNameNodeData(String path);
}
server端发布应用:
1.接口实现
package hadoopRPCService;
import hadoopRpcinfo.HadoopServiceInfo;
public class HadoopServiceProtocol implements HadoopServiceInfo {
public String getNameNodeData(String path) {
return path+"this is your path";
}
}
2、发布应用
package hadoopRPCService;
import java.io.IOException;
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Builder;
import hadoopRpcinfo.HadoopServiceInfo;
public class HadoopServicePublishUtil {
public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
Builder builder =new RPC.Builder(new Configuration());
builder.setBindAddress("localhost")
.setPort(8888)
.setProtocol(HadoopServiceInfo.class)
.setInstance(new HadoopServiceProtocol());
org.apache.hadoop.ipc.RPC.Server server= builder.build();
server.start();
}
}
3、客户端调用
package hadoopRPCClient;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import hadoopRpcinfo.HadoopServiceInfo;
public class Client {
public static void main(String[] args) throws IOException {
HadoopServiceInfo hinfo= RPC.getProxy(HadoopServiceInfo.class, 1L, new InetSocketAddress("localhost", 8888), new Configuration());
String str= hinfo.getNameNodeData("/abc");
System.out.println(str);
}
}