Java RMI(Remote Method Invocation)遠程方法調用

RMI軟件包的描述

RMI 指的是遠程方法調用 (Remote Method Invocation)。它是一種機制,能夠讓在某個 Java虛擬機上的對象調用另一個 Java 虛擬機中的對象上的方法。可以用此方法調用的任何對象必須實現該遠程接口。調用這樣一個對象時,其參數爲 "marshalled" 並將其從本地虛擬機發送到遠程虛擬機(該遠程虛擬機的參數爲 "unmarshalled")上。該方法終止時,將編組來自遠程機的結果並將結果發送到調用方的虛擬機。如果方法調用導致拋出異常,則該異常將指示給調用方。

RMI簡單實現

1、客戶端提供遠程接口2、服務端拿到接口並實現接口裏的所有方法3、在RMI註冊表上註冊服務端地址和遠程接口對象4、客戶端調用
聲明:爲了方便,本人的所有java文件都在同一文件夾內

定義遠程訪問接口

首先由客戶端提供需要遠程訪問的接口,由服務端來實現,接口代碼如下:

import java.rmi.Remote;

public interface IRMIface extends Remote {//繼承遠程對象Remote
	//由於繼承了Remote,所以方法中要拋出RemoteException異常
	public long add(long a,long b) throws java.rmi.RemoteException;
}

服務端實現接口

接口實現代碼如下:

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class RMIfaceImpl extends UnicastRemoteObject implements IRMIface {
	private static final long serialVersionUID = 1L;
	protected RMIfaceImpl() throws RemoteException{
		//這個構造方法不能少
		//網上有人說是因爲繼承了UnicastRemoteObject用來拋出異常用的
		//具體還未深入研究 
	}
	@Override
	public long add(long a, long b) throws RemoteException {
		return a+b;
	}
}

服務端註冊接口

註冊接口代碼:
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class RemoteBinding {
	public static void main(String[] args) {
		try{
			IRMIface myRemote = new RMIfaceImpl();
			System.out.println("=========start binding===========");
			LocateRegistry.createRegistry(8088);//註冊端口
			Naming.rebind("rmi://localhost:8088/remoteRMI", myRemote);//綁定
			System.out.println("=========OK===========");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

編寫客戶端代碼

import java.rmi.Naming;
public class MyRequest {
	public static void main(String [] args){  
		try{
			System.out.println("=========RMI remoteRMI===========");
			IRMIface myRemote = (IRMIface) Naming.lookup("rmi://localhost:8088/remoteRMI");
			System.out.println("=========RMI OK remoteRMI===========");
			long test = myRemote.add(10L, 20L);
			System.out.println(test);
		}catch(Exception e){  
			e.printStackTrace();  
		}  
	}  
}

測試運行

CMD打開命令窗口進入到java文件所在的文件夾,編譯好所有的類(以下操作均在class文件的文件夾下)

第一步、用rmiregistry命令啓動服務

第二步、新開一個窗口輸入命令 java RemoteBinding 運行服務端綁定接口

第三步、再新開一個窗口輸入命令 java MyRequest 運行客戶端調用

注意:以上順序不能換


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章