Hadoop3.2.1 【 HDFS 】源碼分析 : RPC原理 [五] WritableRpcEngine 使用

 

WritableRpcEngine 是Hadoop RPC 默認的實現.

在3.2.1版本已經被標識爲   @Deprecated [棄用] , 所以個人覺得精力應該放到ProtobufRpcEngine 上面會更合適一點.

 

1.定義接口協議

 

/**
 * 協議接口
 */
public interface ClicentNameNodeProtocol {
  //1. 定義協議的ID
  public static final long versionID = 1L;
  /**
   * 拿到元數據方法,協議通信前會訪問元數據
   */
  public String getMetaData(String path);
}

 

2.實現接口協議

/**
 * 實現協議結構
 */
public class ClicentNameNodeImpl implements ClicentNameNodeProtocol {
  public String getMetaData(String path) {
    // 數據存放的路徑,有多少塊,塊大小,校驗和,存儲在哪一臺機器上
    return path + ":3 - {BLOCK_1,BLOCK_2,BLOCK_3....";
  }
}

 

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();
  }
}

 

4.創建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);
  }
}

 

5.測試結果

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章