RPC(Remote Peocedure Call):遠程進程調用java
RPC是Hadoop框架運行的基礎。服務器
RPC:一方叫作客戶端,一方是服務器端,框架
其中被調用對象的調用是在客戶端,執行是在服務器端
ide
1.服務器端提供的對象必須是一個接口,且必須繼承VersionedProtocol,
oop
2.客戶端可以調用的對象的方法必須位於對象的接口中。
spa
Hadoop Rpc的調用
server
1.MyBizI(被調用對象接口)
對象
2.MyBiz(實現類)
繼承
3.MyServer
接口
4.MyClient
---------------------------
//被調用對象必須是一個接口,實現VersionedProtocal
//被調用對象的方法必須位於接口中
public interface MyBizI extends VersionedProtocol{
public abstract String hello(String name);
}
-----------------------------
//實現類,重寫getProtocolVersion方法,用來判斷Server和Client端調用的是否是一個版本的
public class MyBiz implements MyBizI {
/*
* (non-Javadoc)
*
* @see rpc.MyBizI#hello(java.lang.String)
*/
public String hello(String name) {
return "hello " + name;
}
@Override
public long getProtocolVersion(String protocol, long clientVersion)
throws IOException {
// TODO Auto-generated method stub
return 111L;
}
}
-----------------------
//Server端
public class MyServer {
public static final String SERVER_ADDREDD="localhost";
public static final int SERVER_PORT=123;
public static void main(String[] args) throws Exception {
Server server = RPC.getServer(new MyBiz(), SERVER_ADDREDD, SERVER_PORT, new Configuration());
server.start();
}
}
//Client端
public class MyClient {
public static void main(String[] args) throws Exception {
MyBizI waitForProxy = (MyBizI)RPC.waitForProxy(MyBizI.class, 111L, new InetSocketAddress(MyServer.SERVER_ADDREDD,MyServer.SERVER_PORT), new Configuration());
String hello = waitForProxy.hello("wk");
System.out.println(hello);
RPC.stopProxy(waitForProxy);
}
}