利用Hadoop提供的RPC API实现简单的RPC程序

  (toc)

  <人力资源/>   

利用Hadoop提供的RPC API实现简单的RPC程序

  

在Hadoop中提供了RPC服务的使用API,通过其API地使用,可以非常简单地构建远程过程调用程序,下面就给出一个简单的实例。

  

项目结构

  

为了方便操作,所有的代码都放在本地一个项目中,实际上,完全可以将代码放在不同的服务器上,这是RPC的概念,这里就不做过多的介绍。
项目结构如下:

  
 <代码> rpc/├──HelloServiceImpl.java
  ├──IHelloService.java
  ├──RPCClientDriver.java
  └──RPCServerDriver.java  
  

程序代码

  

这里只是做一个简单的示例,并且代码中也给出了非常详细的注释,所以直接给出程序代码。

  
IHelloService.java
  
 <代码>包com.uplooking.bigdata.rpc;
  
  进口org.apache.hadoop.ipc.VersionedProtocol;/* *
  *接口
  *要想使用hadoop提供的RPC服务,必须要继承VersionedProtocol
  */公共接口IHelloService延伸VersionedProtocol {
  
  公共长versionID=1 l;
  
  sayHi公共字符串(字符串名称);
  
  hearBeat公共字符串(字符串击败);
  } 
  
HelloServiceImpl.java
  
 <代码>包com.uplooking.bigdata.rpc;
  
  进口org.apache.hadoop.ipc.ProtocolSignature;
  
  进口java.io.IOException;/* *
  * HelloService服务实现类
  */公共类HelloServiceImpl实现IHelloService {
  
  公共sayHi字符串(字符串名称){
  System.out.println(“名字……”+名字);
  返回“嗨,”+名称;
  }
  
  hearBeat公共字符串(字符串击败){
  system . out。println(“心跳- - - - - - - - - -”+打);
  返回System.currentTimeMillis () +”→“+击败;
  }
  
  公共长getProtocolVersion (String协议,长clientVersion)抛出IOException {
  返回versionID;
  }
  
  公共ProtocolSignature getProtocolSignature (String协议、长clientVersion int clientMethodsHash)抛出IOException {
  返回新ProtocolSignature ();
  }
  } 
  
RPCServerDriver.java
  
 <代码>包com.uplooking.bigdata.rpc;
  
  进口org.apache.hadoop.conf.Configuration;
  进口org.apache.hadoop.ipc.RPC;
  
  进口java.io.IOException;/* *
  * RPC服务端程序,启动并发布服务
  */公开课RPCServerDriver {
  
  公共静态void main (String [] args)抛出IOException {//创建RPC的配置
  配置配置=new配置();//构建RPC的建设者对象
  RPC。Builder构建器=new RPC.Builder(配置);//设置RPC服务器的信息,返回一个服务器对象
  RPC。服务器服务器=builder.setBindAddress (“localhost”)
  .setPort (4893)
  .setProtocol (IHelloService.class)
  .setInstance(新HelloServiceImpl ())
  .build ();//启动RPC服务器//这是一个守护进程,所以主要函数不会退出
  server.start ();
  
  System.out.println(“——服务启动了- - -”);
  
  }
  
  } 
  
RPCClientDriver.java
  
 <代码>包com.uplooking.bigdata.rpc;
  
  进口org.apache.hadoop.conf.Configuration;
  进口org.apache.hadoop.ipc.RPC;
  
  进口java.io.IOException;
  进口java.net.InetAddress;
  进口java.net.InetSocketAddress;/* *
  * RPC客户端程序
  */公开课RPCClientDriver {
  公共静态void main (String [] args)抛出IOException {//构建InetSocketAddress对象
  InetSocketAddress地址=新的InetSocketAddress (InetAddress.getByName (“localhost”), 4893年);//通过RPC.getProxy方法获得代理对象/* *
  * @param协议接口的类型对象
  * @param clientVersion版本号
  * @param addr服务端地址
  * @param相依配置信息
  */IHelloService helloServiceProxy=RPC.getProxy (IHelloService。类,IHelloService。versionID,地址,新的配置());
  字符串的结果=helloServiceProxy.sayHi(“小秋田”);
  System.out.println(结果);
  }
  } 
  

测试

  

启动RPCServerDriver,输出如下:

  
 <代码> - - -服务启动了- - - - - -  
  

启动RPCClicentDriver,输出如下:

  
 <代码>你好,小秋田 
  

此时再查看服务端的输出:

  
 <代码> - - -服务启动了- - - - - -
  名字……小秋田 
  

这样的话,通过使用Hadoop提供的RPC API,就实现了一个简单的RPC程序。

利用Hadoop提供的RPC API实现简单的RPC程序