基本概念 模塊 RPC 通常采用客戶(hù)機(jī)/服務(wù)器模型。請(qǐng)求程序是客戶(hù)機(jī),服務(wù)提供程序則是一個(gè)服務(wù)器。包括以下幾個(gè)模塊 通信模塊:兩個(gè)相互協(xié)作的通信模塊實(shí)現(xiàn)請(qǐng)求-應(yīng)答協(xié)議。同步方式和異步方式。 Stub程序:客戶(hù)端和服務(wù)器端均包含Stub程序,代理程序。它使得
基本概念
模塊
RPC通常采用客戶(hù)機(jī)/服務(wù)器模型。請(qǐng)求程序是客戶(hù)機(jī),服務(wù)提供程序則是一個(gè)服務(wù)器。包括以下幾個(gè)模塊
通信模塊:兩個(gè)相互協(xié)作的通信模塊實(shí)現(xiàn)請(qǐng)求-應(yīng)答協(xié)議。同步方式和異步方式。
Stub程序:客戶(hù)端和服務(wù)器端均包含Stub程序,代理程序。它使得遠(yuǎn)程函數(shù)調(diào)用表現(xiàn)的跟本地調(diào)用一樣,對(duì)用戶(hù)程序完全透明。
在客戶(hù)端,它表現(xiàn)的就像一個(gè)本地程序,但不直接執(zhí)行本地調(diào)用,而是將請(qǐng)求信息通過(guò)網(wǎng)絡(luò)模塊發(fā)送給服務(wù)器端。
在服務(wù)器端,解碼請(qǐng)求消息中的參數(shù),調(diào)用相應(yīng)的服務(wù)過(guò)程和編碼應(yīng)答結(jié)果的返回值。
調(diào)度程序:接收來(lái)自通信模塊的請(qǐng)求消息,并根據(jù)其中的標(biāo)識(shí)選擇一個(gè)Stub程序處理。線(xiàn)程池處理。
客戶(hù)程序/服務(wù)過(guò)程:請(qǐng)求的發(fā)出者和請(qǐng)求的處理者。
步驟
1.客戶(hù)程序以本地方式調(diào)用系統(tǒng)產(chǎn)生的Stub程序。
2.該Stub程序?qū)⒑瘮?shù)調(diào)用信息按照網(wǎng)絡(luò)通信模塊的要求封裝成消息包。并交給通信模塊發(fā)送到遠(yuǎn)程服務(wù)器端。
3.遠(yuǎn)程服務(wù)器端接收此消息后,將此消息發(fā)送給相應(yīng)的Stub程序。
4.Stub程序拆封消息,形成被調(diào)過(guò)程要求的形式,并調(diào)用對(duì)應(yīng)的函數(shù)。
5.被調(diào)用函數(shù)按照所獲參數(shù)執(zhí)行,并將結(jié)果返回給Stub程序。
6.Stub程序?qū)⒋私Y(jié)果封裝成消息,通過(guò)網(wǎng)絡(luò)通信模塊逐級(jí)地傳送給客戶(hù)程序。
HadoopRPC
接口:
public static VersionedProtocol getProxy/waitForProxy():構(gòu)造一個(gè)客戶(hù)端代理對(duì)象,用于向服務(wù)器發(fā)送RPC請(qǐng)求。public static Server getServer():為某個(gè)協(xié)議示例構(gòu)造一個(gè)服務(wù)器對(duì)象,用于處理客戶(hù)端發(fā)送的請(qǐng)求。
1.定義RPC協(xié)議。RPC協(xié)議是客戶(hù)端與服務(wù)器端之間的通信接口,它定義了服務(wù)器端對(duì)外提供的服務(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.實(shí)現(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)造并啟動(dòng)RPC Serverserver = RPC.getServer(new ClientProtocolImpl(),serverHost,serverPort,numHandlers,false,conf);//numHandlers表示服務(wù)器端處理請(qǐng)求的線(xiàn)程數(shù)目。server.start();4.構(gòu)造RPC Client,并發(fā)送RPC請(qǐng)求。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)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com