在分布式系统中各台服务器需要相互调用其他服务器的某些方法,可以使用RPC的方式调用(webservice也是rpc的一种实现方式),在hadoop中有一套它自己封装好的RPC工具包,在hadoop的common包中,导入这个包即可。
下面我们来简单使用下hadoop封装的rpc框架:
- 服务器端:
1.创建一个协议接口
public interface MyInterface {
//版本号
public static final long versionID=10086L;
//协议方法
public String getStr();
}
2.创建一个实现类
public class MyImpl implements MyInterface{
/**
* 协议方法实现
*/
@Override
public String getStr() {
// TODO Auto-generated method stub
return "this is a test";
}
}
3.创建main方法绑定服务
public class MyMain{
public static void main(String[] args) throws Exception {
//创建建造对象
Builder b = new RPC.Builder(new Configuration());
//绑定参数
//第一个为ip
//第二个为端口
//第三个为协议接口
//第四个为业务实例
b.setBindAddress("localhost")
.setPort(9876)
.setProtocol(MyInterface.class)
.setInstance(new MyImpl());
//创建服务并启动
b.build().start();
}
}
- 客户端:
1.创建proxy代理对象并远程调用该方法(服务端和客户端的协议接口需要保持一致)
public class MyClientMain{
public static void main(String[] args) throws Exception {
//创建代理对象
MyInterface myProxy = RPC.getProxy(MyInterface.class, 10086L,
new InetSocketAddress("localhost", 9876), new Configuration());
//远程调用服务器方法
String str = myProxy.getStr();
//打印
System.out.println(str);
}
}
- 结果:
先启动MyMain,再启动MyClientMain结果如下: