(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程序。