接口类ClientProtocol
package rpcTest;
import java.io.IOException;
interface ClientProtocol extends org.apache.hadoop.ipc.VersionedProtocol{
public static final long versionID = 1L;
String echo(String value) throws IOException;
int add(int v1, int v2) throws IOException;
}
RpcClient
package rpcTest;
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 {
Configuration conf = new Configuration();
String ADDRESS = "localhost";
int port = 9998;
ClientProtocol proxy = (ClientProtocol) RPC.getProxy(ClientProtocol.class,
ClientProtocol.versionID,
new InetSocketAddress(ADDRESS,port),
conf);
int result = proxy.add(5, 6);
System.out.println(result);
}
}
RpcServer类
package rpcTest;
import java.io.IOException;
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.ProtocolSignature;
import org.apache.hadoop.ipc.RPC;
import org.mortbay.jetty.Server;
public class RpcServer {
public static class ClientProtocolImpl implements ClientProtocol{
@Override
public long getProtocolVersion(String protocol, long clientVersion)
throws IOException {
// TODO Auto-generated method stub
return ClientProtocol.versionID;
}
@Override
public ProtocolSignature getProtocolSignature(String protocol,
long clientVersion, int clientMethodsHash) throws IOException {
// TODO Auto-generated method stub
return new ProtocolSignature(ClientProtocol.versionID,null);
}
@Override
public String echo(String value) throws IOException {
// TODO Auto-generated method stub
return value;
}
@Override
public int add(int v1, int v2) throws IOException {
// TODO Auto-generated method stub
return v1+ v2;
}
}
public static void main(String[] args) {
Configuration conf = new Configuration();
String ADDRESS = "localhost";
int port = 9998;
RPC.Server server;
try {
server = new RPC.Builder(conf).setProtocol(ClientProtocol.class)
.setInstance(new ClientProtocolImpl())
.setBindAddress(ADDRESS)
.setPort(port)
.setNumHandlers(1).build();
server.start();
} catch (HadoopIllegalArgumentException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行过程:
1。先执行RpcServer类,监听相关端口。
2。再执行RpcClient,执行客户端程序。