WritableRpcEngine是 Hadoop RPC 默认的实现。在 3.2.1 版本已经被标识为@Deprecated
定义接口协议
/*** 协议接口*/public interface ClicentNameNodeProtocol {//1. 定义协议的IDpublic static final long versionID = 1L;/*** 拿到元数据方法,协议通信前会访问元数据*/public String getMetaData(String path);}
实现接口协议
/*** 实现协议结构*/public class ClicentNameNodeImpl implements ClicentNameNodeProtocol {public String getMetaData(String path) {// 数据存放的路径,有多少块,块大小,校验和,存储在哪一台机器上return path + ":3 - {BLOCK_1,BLOCK_2,BLOCK_3....";}}
创建Server服务, 注册协议,并启动RPC服务
/*** 启动RPC服务*/public class Server {public static void main(String[] args) throws IOException {//1. 构建RPC框架RPC.Builder builder = new RPC.Builder(new Configuration());//2. 绑定地址builder.setBindAddress("localhost");//3. 绑定端口builder.setPort(7777);//4. 绑定协议builder.setProtocol(ClicentNameNodeProtocol.class);//5. 调用协议实现类builder.setInstance(new ClicentNameNodeImpl());//6. 创建服务RPC.Server server = builder.build();//7. 启动服务server.start();}}
创建Client服务,请求数据接口
/*** 访问RPC服务*/public class Client {public static void main(String[] args) throws IOException {//1. 拿到RPC协议ClicentNameNodeProtocol proxy = RPC.getProxy(ClicentNameNodeProtocol.class, 1L,new InetSocketAddress("localhost", 7777), new Configuration());//2. 发送请求String metaData = proxy.getMetaData("/meta");//3. 打印元数据System.out.println(metaData);}}
