Hadoop技術內幕HDFS-筆記4之遠程調用

來源:互聯網
上載者:User

標籤:style   blog   http   java   使用   2014   

1.      hadoop遠端程序呼叫

RPC:XML-RPC,JSON-RPC,CORBA,RMI(Remote Method Invocation),Haoop IPC(處理序間通訊)

RPC原理:允許本地程式(用戶端)調用其他機器(伺服器)上的過程,用戶端使用參數將資訊傳送給調用方,通過傳回值得到訊息。

RPC的server在運行時會阻塞在接收訊息的調用上,當接到用戶端的請求後,會解包以擷取請求參數;結束後傳回值通過主程式打包發送給用戶端。

1.1.  java RMI

依賴於java序列化機制

運行一個jvm裡的java程式調用另一個jvm裡的程式,用戶端保留一個調用對象的介面,通過介面方式調用方法。而介面實際執行是在服務端,服務端才具有調用對象的執行個體,用戶端可以簡單理解為僅是一個代理。

遠程對象,實現了一個或多個遠程介面,遠程介面聲明了可以由外部系統調用的對象方法。(遠程只是一個修飾語)

1、  定義一個遠程介面(實驗是失敗的)

實際代碼:

package test.rmi;import java.io.Serializable;import java.rmi.Remote;import java.rmi.RemoteException;//必須繼承Remote介面//必須實現Serializable,增加序列化功能public interface RMIQueryStatus extends Remote,Serializable{//方法必須拋出RemoteException異常String getFileName(String fileName) throws RemoteException;}2、定義一個遠程對象的實作類別package test.rmi;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class RMIQueryStatusImpl extends UnicastRemoteObject implements RMIQueryStatus{//聲明一個版本ID(必須要有嗎?可以試試)private static final long serialVersionUID = 1L;public RMIQueryStatusImpl() throws RemoteException {super();// TODO Auto-generated constructor stub}@Overridepublic String getFileName(String fileName) throws RemoteException {// TODO Auto-generated method stubreturn fileName+" ,good,you get it!";}}3、開啟JAVA RMI註冊服務在cmd下運行rmiregistry (使用預設連接埠12090)可以增加 如rmiregistry 10000,即使用10000連接埠5、編寫服務端主程式package test.rmi;import java.rmi.Naming;import java.rmi.registry.LocateRegistry;public class RMIQueryStatusServer {public static void main(String[] args) throws Exception {//建立遠程對象執行個體RMIQueryStatusImpl rmiObj = new RMIQueryStatusImpl();//使用本地連接埠,12090LocateRegistry.createRegistry(12090);//綁定遠程對象到名字Naming.rebind("RMI_URL", rmiObj);System.out.println("Server is ready.");}}

 

運行報錯(解決不了):

java.lang.ClassNotFoundException: test.rmi.RMIQueryStatus

5、用戶端程式:

package test.rmi;import java.rmi.Naming;public class RMIQueryStatusClient {public static void main(String[] args) throws Exception{//從註冊點擷取一個遠程對象RMIQueryStatus remoteObj = (RMIQueryStatus) Naming.lookup("RMI_URL");//調用方法String res = remoteObj.getFileName("hello");//輸出結果System.out.println(res);}}

 

--不知道書中是如何成功的。有時間將這個問題解決一下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.