中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Hadoop提供的RPC API實現簡單的RPC程序

發布時間:2020-07-24 18:30:23 來源:網絡 閱讀:11666 作者:xpleaf 欄目:大數據

[toc]


利用Hadoop提供的RPC API實現簡單的RPC程序

在Hadoop中提供了RPC服務的使用API,通過其API地使用,可以非常簡單地構建遠程過程調用程序,下面就給出一個簡單的實例。

項目結構

為了方便操作,所有的代碼都放在本地一個項目中,實際上,完全可以將代碼放在不同的服務器上,這是RPC的概念,這里就不做過多的介紹。
項目結構如下:

rpc/
├── HelloServiceImpl.java
├── IHelloService.java
├── RPCClientDriver.java
└── RPCServerDriver.java

程序代碼

這里只是做一個簡單的示例,并且代碼中也給出了非常詳細的注釋,所以直接給出程序代碼。

IHelloService.java
package com.uplooking.bigdata.rpc;

import org.apache.hadoop.ipc.VersionedProtocol;

/**
 * 接口
 * 要想使用hadoop提供的RPC服務,必須要繼承VersionedProtocol
 */
public interface IHelloService extends VersionedProtocol {

    public long versionID = 1L;

    public String sayHi(String name);

    public String hearBeat(String beat);
}
HelloServiceImpl.java
package com.uplooking.bigdata.rpc;

import org.apache.hadoop.ipc.ProtocolSignature;

import java.io.IOException;

/**
 * HelloService服務實現類
 */
public class HelloServiceImpl implements IHelloService {

    public String sayHi(String name) {
        System.out.println("name..." + name);
        return "Hi, " + name;
    }

    public String hearBeat(String beat) {
        System.out.println("----heartbeat----" + beat);
        return System.currentTimeMillis() + "--->" + beat;
    }

    public long getProtocolVersion(String protocol, long clientVersion) throws IOException {
        return versionID;
    }

    public ProtocolSignature getProtocolSignature(String protocol, long clientVersion, int clientMethodsHash) throws IOException {
        return new ProtocolSignature();
    }
}
RPCServerDriver.java
package com.uplooking.bigdata.rpc;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

import java.io.IOException;

/**
 * RPC服務端程序,啟動并發布服務
 */
public class RPCServerDriver {

    public static void main(String[] args) throws IOException {
        // 創建RPC的配置
        Configuration configuration = new Configuration();
        // 構建RPC的builder對象
        RPC.Builder builder = new RPC.Builder(configuration);
        // 設置RPC Server的信息,返回一個server對象
        RPC.Server server = builder.setBindAddress("localhost")
                .setPort(4893)
                .setProtocol(IHelloService.class)
                .setInstance(new HelloServiceImpl())
                .build();
        // 啟動RPC Server
        // 這是一個守護進程,所以main函數不會退出
        server.start();

        System.out.println("---服務啟動了---");

    }

}
RPCClientDriver.java
package com.uplooking.bigdata.rpc;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;

/**
 * RPC客戶端程序
 */
public class RPCClientDriver {
    public static void main(String[] args) throws IOException {
        // 構建InetSocketAddress對象
        InetSocketAddress address = new InetSocketAddress(InetAddress.getByName("localhost"), 4893);
        // 通過RPC.getProxy方法獲得代理對象
        /**
         * @param protocol      接口的類型對象
         * @param clientVersion 版本號
         * @param addr          服務端地址
         * @param conf          配置信息
         */
        IHelloService helloServiceProxy = RPC.getProxy(IHelloService.class, IHelloService.versionID, address, new Configuration());
        String result = helloServiceProxy.sayHi("小秋田");
        System.out.println(result);
    }
}

測試

啟動RPCServerDriver,輸出如下:

---服務啟動了---

啟動RPCClicentDriver,輸出如下:

Hi, 小秋田

此時再查看服務端的輸出:

---服務啟動了---
name...小秋田

這樣的話,通過使用Hadoop提供的RPC API,就實現了一個簡單的RPC程序。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

句容市| 康定县| 达孜县| 浮山县| 临西县| 兴山县| 根河市| 琼结县| 莱芜市| 花莲县| 天长市| 改则县| 中阳县| 上栗县| 来宾市| 巴楚县| 敦化市| 平利县| 洪泽县| 广昌县| 修文县| 江口县| 永和县| 太仓市| 青浦区| 遂溪县| 滨州市| 阳谷县| 五寨县| 黔西| 自贡市| 林芝县| 湘潭市| 闸北区| 桐乡市| 台中县| 夏邑县| 山东| 渝中区| 运城市| 光山县|