基本概念 模塊 RPC 通常采用客戶機/服務(wù)器模型。請求程序是客戶機,服務(wù)提供程序則是一個服務(wù)器。包括以下幾個模塊 通信模塊:兩個相互協(xié)作的通信模塊實現(xiàn)請求-應(yīng)答協(xié)議。同步方式和異步方式。 Stub程序:客戶端和服務(wù)器端均包含Stub程序,代理程序。它使得
基本概念
模塊
RPC通常采用客戶機/服務(wù)器模型。請求程序是客戶機,服務(wù)提供程序則是一個服務(wù)器。包括以下幾個模塊
通信模塊:兩個相互協(xié)作的通信模塊實現(xiàn)請求-應(yīng)答協(xié)議。同步方式和異步方式。
Stub程序:客戶端和服務(wù)器端均包含Stub程序,代理程序。它使得遠程函數(shù)調(diào)用表現(xiàn)的跟本地調(diào)用一樣,對用戶程序完全透明。
在客戶端,它表現(xiàn)的就像一個本地程序,但不直接執(zhí)行本地調(diào)用,而是將請求信息通過網(wǎng)絡(luò)模塊發(fā)送給服務(wù)器端。
在服務(wù)器端,解碼請求消息中的參數(shù),調(diào)用相應(yīng)的服務(wù)過程和編碼應(yīng)答結(jié)果的返回值。
調(diào)度程序:接收來自通信模塊的請求消息,并根據(jù)其中的標(biāo)識選擇一個Stub程序處理。線程池處理。
客戶程序/服務(wù)過程:請求的發(fā)出者和請求的處理者。
步驟
1.客戶程序以本地方式調(diào)用系統(tǒng)產(chǎn)生的Stub程序。
2.該Stub程序?qū)⒑瘮?shù)調(diào)用信息按照網(wǎng)絡(luò)通信模塊的要求封裝成消息包。并交給通信模塊發(fā)送到遠程服務(wù)器端。
3.遠程服務(wù)器端接收此消息后,將此消息發(fā)送給相應(yīng)的Stub程序。
4.Stub程序拆封消息,形成被調(diào)過程要求的形式,并調(diào)用對應(yīng)的函數(shù)。
5.被調(diào)用函數(shù)按照所獲參數(shù)執(zhí)行,并將結(jié)果返回給Stub程序。
6.Stub程序?qū)⒋私Y(jié)果封裝成消息,通過網(wǎng)絡(luò)通信模塊逐級地傳送給客戶程序。
HadoopRPC
接口:
public static VersionedProtocol getProxy/waitForProxy():構(gòu)造一個客戶端代理對象,用于向服務(wù)器發(fā)送RPC請求。public static Server getServer():為某個協(xié)議示例構(gòu)造一個服務(wù)器對象,用于處理客戶端發(fā)送的請求。
1.定義RPC協(xié)議。RPC協(xié)議是客戶端與服務(wù)器端之間的通信接口,它定義了服務(wù)器端對外提供的服務(wù)接口。interface ClientProtocol extends org.apache.hadoop.ipc.VersionedProtocol{public static final long versionID=1L;String echo(String value) throws IOException;int add(int v1,int v2) throws IOException;}2.實現(xiàn)RPC協(xié)議。public static class ClientProtocolImpl implements ClientProtocl{public long getProtocolVersion(String protocol,long clientVersion){return ClientProtocol.versionID ;}public String echo(String value) throws IOException{return value;}public int add(int v1,int v2) throws IOException{return v1+v2;}}3.構(gòu)造并啟動RPC Serverserver = RPC.getServer(new ClientProtocolImpl(),serverHost,serverPort,numHandlers,false,conf);//numHandlers表示服務(wù)器端處理請求的線程數(shù)目。server.start();4.構(gòu)造RPC Client,并發(fā)送RPC請求。proxy = (ClientProtocol)RPC.getProxy(ClientProtocol.class,ClientProtocol.versionID,addr,conf);int result = proxy.add(4,5);String echoResult = proxy.echo("hello");
原文地址:解析MapReduce原理–筆記(9)hadoopRPC基礎(chǔ), 感謝原作者分享。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com