模拟hadoop-rpc通信

一、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);
    }
}

 

猜你喜欢

转载自www.cnblogs.com/areyouready/p/9813589.html