一、定义server端代码
1.定义一个接口,该接口继承org.apache.hadoop.ipc.VersionedProtocol接口
import org.apache.hadoop.ipc.VersionedProtocol;
public interface MyInterface extends VersionedProtocol {
//定义一个版本号
public static long versionID = 1;
//定义客户端可以调用的方法
public String sayHello(String name);
}
2.定义实现以上接口的实现类
import java.io.IOException;
import org.apache.hadoop.ipc.ProtocolSignature;
public class MyInterfaceImpl implements MyInterface {
@Override
public ProtocolSignature getProtocolSignature(String arg0, long arg1,
int arg2) throws IOException {
// 指定签名
return new ProtocolSignature(MyInterface.versionID, null);
}
@Override
public long getProtocolVersion(String arg0, long arg1) throws IOException {
// 返回的该实现类的版本号
return MyInterface.versionID;
}
@Override
public String sayHello(String name) {
System.out.println("***********调用到了server端*************");
return "Hello " + name;
}
}
3.测试开启一个服务端
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 {
/**
* @param args
* @throws IOException
* @throws HadoopIllegalArgumentException
*/
public static void main(String[] args) throws Exception {
// 创建一个RPC builder
RPC.Builder builder = new RPC.Builder(new Configuration());
//指定RPC Server的参数
builder.setBindAddress("localhost");
builder.setPort(7788);
//将自己的程序部署到server上
builder.setProtocol(MyInterface.class);
builder.setInstance(new MyInterfaceImpl());
//创建Server
Server server = builder.build();
//启动服务
server.start();
}
}
二、客户端代码
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import first.com.demo.hadoop.example0413.rpc.server.MyInterface;
public class RPCClient {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//得到服务器端的一个代理对象
MyInterface proxy = RPC.getProxy(MyInterface.class,
MyInterface.versionID,
new InetSocketAddress("localhost", 7788),
new Configuration());
//获取服务器返回的结果
String result = proxy.sayHello("tom");
System.out.println("结果是:" + result);
}
}
先运行服务端的main方法,然后运行客户端的方法可以进行通讯,这就是一个简单的RPC实例