Hadoop RPC远程过程调用协议简单实现
- 简单来说,RPC就是 客户端的进程 远程调用 服务器端进程 中的方法(自己理解的,不一定对)。
1.Java代码
Server端:
package cn.tjubd.hadoop.rpc;
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.Server;
public class RPCServer implements Barty{
public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
Server server = new RPC.Builder(new Configuration())
.setInstance(new RPCServer())
.setBindAddress("172.28.9.62")
.setPort(9527)
.setProtocol(Barty.class)
.build();
server.start();
}
@Override
public String sayHi(String name) {
return "HI~" + name;
}
}
- 这里的服务器地址需要能与本机建立连接,在本机命令行中
ping 服务器地址
- 如
ping 172.28.9.62
,能ping 通即可。
接口:
package cn.tjubd.hadoop.rpc;
public interface Barty {
public static final long versionID = 10010;
public String sayHi(String name);
}
Client端:
package cn.tjubd.hadoop.rpc;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
public class RPCClient {
public static void main(String[] args) throws IOException {
Barty proxy = RPC.getProxy(Barty.class, 10010,
new InetSocketAddress("172.28.9.62", 9527),
new Configuration());
String sayHi = proxy.sayHi("GG Bond");
System.out.println(sayHi);
RPC.stopProxy(proxy);
}
}
2.运行
Over!