定义一个通讯协议的接口
public interface ClientNamenodeProtocal {
long versionID = 1L;
String getMetaData(String path);
}
实现类
public class MyNameNode implements ClientNamenodeProtocal{
@Override
public String getMetaData(String path){
return path+":3 - {blk_1,blk_2,blk_3}";
}
}
服务发布类
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
/**
* @author snow
*/
public class PublishServiceUtil {
public static void main(String[] args) throws IOException {
RPC.Builder builder = new RPC.Builder(new Configuration());
builder.setBindAddress("localhost")
.setPort(8888)
.setProtocol(ClientNamenodeProtocal.class)
.setInstance(new MyNameNode());
RPC.Server server = builder.build();
server.start();
}
}
客户端访问类
import com.ghq.rpc.ClientNamenodeProtocal;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
import java.net.InetSocketAddress;
/**
* @author snow
*/
public class MyHdfsClient {
public static void main(String[] args) throws IOException {
ClientNamenodeProtocal proxy = RPC.getProxy(ClientNamenodeProtocal.class, 1L,
new InetSocketAddress("localhost", 8888), new Configuration());
String metaData = proxy.getMetaData("test01");
System.out.println(metaData);
}
}
执行步骤:
- 启动PublishServiceUtil类
- 启动MyHdfsClient类,即可