前言:
本例中預設已經在eclipse中建立一個maven工程並配置hadoop資源。以下是pom.xml的配置資訊
概述:
1: 在一個jvm中一個對象可以調用另一個對象的資源,但是如果是多個jvm,jvmA中的對象調用jvmB中的對象則需要藉助於RPC協議來完成此操作。
:2:Rpc協議採用的是CS結構,請求方相當於一個客戶機被請求方相當於伺服器。
3:Java在使用Rpc協議通訊時需使用介面org.apache.hadoop.ipc.VersionedProtocol來完成此功能。此介面中聲明了兩個方法:getProtocolVersion返回版本號碼,getProtocolSignature返回簽名。
例子:
例子中代碼分四部分。client、server、server的自訂協議,server自訂協議的實現
圖1、client代碼
圖 2、server代碼
圖 3、 server端繼承的VersionedProtocol介面
圖4、server端介面的實現
運行結果
啟動server端,啟動client端,分別查看server和client控制台
圖5 client控制台
圖6 server控制台,server一直沒有結束處於監聽狀態
代碼總結:
圖1:Client配置了要訪問的ip地址和連接埠然後得到了一個代理,當調用heartBeat方法時向伺服器端發送一個請求將簽名資訊以及其他的參數傳遞過去,接受返回後結束。圖5就是client的輸出。
圖2:Server配置了需要監聽的ip地址和連接埠並實現了org.apache.hadoop.ipc.VersionedProtocol介面完成自己的邏輯,當請求發送過來後他會接收Client發送過來的參數然後執行自己的邏輯,之後將傳回值返回給Client。然後Client接收到傳回值後就結束而Server則繼續監聽狀態等待下一次的訪問。
實際應用中Client可以把自己的狀態資訊發送給Server由Server對所有的Client進行處理。
總結:
Server實現一個聲明了很多方法的介面並對外暴露此介面,Client通過調用此介面中聲明的方法向server發送資訊從而實現了與server的通訊。而我們就稱此介面為RPC通訊協定,當然這是我的理解。