所以直接给出程序代码

时间:2021-11-25 04:01:46

标签:

[toc] 操作Hadoop供给的RPC API实现简单的RPC措施

在Hadoop*给了RPC处事的使用API,通过其API地使用,可以非常简单地构建长途过程挪用措施,下面就给出一个简单的实例。

项目布局

为了便利操纵,,所有的代码都放在本地一个项目中,实际上,完全可以将代码放在差此外处事器上,这是RPC的观点,这里就不做过多的介绍。
项目布局如下:

rpc/ ├── HelloServiceImpl.java ├── IHelloService.java ├── RPCClientDriver.java └── RPCServerDriver.java 措施代码

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

IHelloService.java package com.uplooking.bigdata.rpc; import org.apache.hadoop.ipc.VersionedProtocol; /** * 接口 * 要想使用hadoop供给的RPC处事,必需要担任VersionedProtocol */ public interface IHelloService extends VersionedProtocol { public long versionID = 1L; public String sayHi(String name); public String hearBeat(String beat); } HelloServiceImpl.java package com.uplooking.bigdata.rpc; import org.apache.hadoop.ipc.ProtocolSignature; import java.io.IOException; /** * HelloService处事实现类 */ public class HelloServiceImpl implements IHelloService { public String sayHi(String name) { System.out.println("name..." + name); return "Hi, " + name; } public String hearBeat(String beat) { System.out.println("----heartbeat----" + beat); return System.currentTimeMillis() + "--->" + beat; } public long getProtocolVersion(String protocol, long clientVersion) throws IOException { return versionID; } public ProtocolSignature getProtocolSignature(String protocol, long clientVersion, int clientMethodsHash) throws IOException { return new ProtocolSignature(); } } RPCServerDriver.java package com.uplooking.bigdata.rpc; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import java.io.IOException; /** * RPC处事端措施,启动并颁布处事 */ public class RPCServerDriver { public static void main(String[] args) throws IOException { // 创建RPC的配置 Configuration configuration = new Configuration(); // 构建RPC的builder东西 RPC.Builder builder = new RPC.Builder(configuration); // 设置RPC Server的信息,返回一个server东西 RPC.Server server = builder.setBindAddress("localhost") .setPort(4893) .setProtocol(IHelloService.class) .setInstance(new HelloServiceImpl()) .build(); // 启动RPC Server // 这是一个守护进程,所以main函数不会退出 server.start(); System.out.println("---处事启动了---"); } } RPCClientDriver.java package com.uplooking.bigdata.rpc; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; /** * RPC客户端措施 */ public class RPCClientDriver { public static void main(String[] args) throws IOException { // 构建InetSocketAddress东西 InetSocketAddress address = new InetSocketAddress(InetAddress.getByName("localhost"), 4893); // 通过RPC.getProxy要领获得代办代理东西 /** * @param protocol 接口的类型东西 * @param clientVersion 版本号 * @param addr 处事端地点 * @param conf 配置信息 */ IHelloService helloServiceProxy = RPC.getProxy(IHelloService.class, IHelloService.versionID, address, new Configuration()); String result = helloServiceProxy.sayHi("小秋田"); System.out.println(result); } } 测试

启动RPCServerDriver,输出如下:

---处事启动了---

启动RPCClicentDriver,输出如下:

Hi, 小秋田

此时再检察处事真个输出:

---处事启动了--- name...小秋田

这样的话,通过使用Hadoop供给的RPC API,就实现了一个简单的RPC措施。

操作Hadoop供给的RPC API实现简单的RPC措施