4个类就可体验HADOOP-RPC的简单、实用。
一,writable-rpc
一,协议
所谓协议,实际是一个接口,用来定义该RPC提供的功能
package rpc.writeable;
public interface MyProtocol {
void mkdir(String path);
String getName(String name);
long versionID = 1L;
}
二,协议实现
client通过代理进行本地调用,调用会通过网络转发到服务端,服务端必须实现具体功能。
package rpc.writeable;
public class MyProtocolImpl implements MyProtocol{
@Override
public void mkdir(String path) {
System.out.println("create path:" + path);
}
@Override
public String getName(String name) {
return "create success";
}
}
三,服务端
服务端通过网络编程将协议实现的功能提供给client端
package rpc.writeable;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
public class MyServer {
public static void main(String[] args) throws IOException {
RPC.Server localhost = new RPC.Builder(new Configuration())
.setBindAddress("localhost")
.setPort(8888)
.setProtocol(MyProtocol.class)
.setInstance(new MyProtocolImpl())
.build();
localhost.start();
}
}
四,客户端
客户端获取代理时制定协议、服务端ip端口,调用代理,代理将调用转发给服务端。
package rpc.writeable;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
import java.net.InetSocketAddress;
public class MyClient {
public static void main(String[] args) throws IOException {
MyProtocol localhost = RPC.getProxy(MyProtocol.class, MyProtocol.versionID, new InetSocketAddress("localhost", 8888),new Configuration());
System.out.println(localhost.getName("ddd"));
}
}