一、RPC服务类
package com.css.rpc.server;
import java.io.IOException;
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Builder;
import org.apache.hadoop.ipc.RPC.Server;
import com.css.rpc.protocol.ClientNamenodeProtocol;
/**
* RPC服务类
*/
public class PublishServer {
public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
// 1.构建RPC框架
Builder builder = new RPC.Builder(new Configuration());
// 2.绑定地址
builder.setBindAddress("localhost");
// 3.绑定端口号
builder.setPort(7777);
// 4.绑定协议
builder.setProtocol(ClientNamenodeProtocol.class);
// 5.调用协议的实现类
builder.setInstance(new MyNameNode());
// 6.创建服务
Server server = builder.build();
server.start();
}
}
二、自定义遵循的协议类
package com.css.rpc.protocol;
/**
* 自定义遵循的协议类
*/
public interface ClientNamenodeProtocol {
// 1.定义协议的id
public static final long versionID = 1L;
// 2.定义方法(拿到元数据的方式)
public String getMetaData(String path);
}
三、自定义协议的实现类
package com.css.rpc.server;
import com.css.rpc.protocol.ClientNamenodeProtocol;
/**
* 自定义协议的实现类
*/
public class MyNameNode implements ClientNamenodeProtocol{
@Override
public String getMetaData(String path) {
return path + ": 3 - {BLK_1,BLK_2,BLK_3...}";
}
}
四、获取元数据信息(客户端)
package com.css.rpc.client;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import com.css.rpc.protocol.ClientNamenodeProtocol;
/**
* 获取元数据信息
*/
public class GetHDFS {
public static void main(String[] args) throws IOException {
// 1.拿到协议
ClientNamenodeProtocol proxy = RPC.getProxy(ClientNamenodeProtocol.class, 1L, new InetSocketAddress("localhost", 7777), new Configuration());
// 2.发送请求
String metaData = proxy.getMetaData("/hello");
// 3.拿到元数据信息
System.out.println(metaData);
}
}