RMI (Remote Method Invocation) 是 Java 核心 API,允許運行在不同 JVM(甚至不同物理機)上的對象互相調用方法。本文通過一個文件狀態查詢示例,演示 RMI 服務端註冊與客戶端調用全流程。
java.rmi.Remote,方法拋出 RemoteException。UnicastRemoteObject 實現接口。Naming.lookup 獲取代理調用。package com.tc.remote;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMIQueryStatus extends Remote {
RMIFileStatus getFileStatus(String filename) throws RemoteException;
}
package com.tc.remote;
import java.io.Serializable;
public class RMIFileStatus implements Serializable {
private String filename;
// 構造器、getter、toString 省略
}
package com.tc.remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class RMIQueryStatusImpl extends UnicastRemoteObject implements RMIQueryStatus {
public RMIQueryStatusImpl() throws RemoteException { }
@Override
public RMIFileStatus getFileStatus(String filename) throws RemoteException {
return new RMIFileStatus(filename);
}
}
package com.tc.remote;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class RMIQueryStatusServer {
public static final String RMI_URL = "rmi://localhost:8888/RHello";
public static void main(String[] args) {
try {
RMIQueryStatusImpl impl = new RMIQueryStatusImpl();
LocateRegistry.createRegistry(8888); // 創建註冊表
Naming.rebind(RMI_URL, impl); // 綁定(rebind 覆蓋模式)
System.out.println(">>> RMI 服務啟動成功!");
} catch (Exception e) { e.printStackTrace(); }
}
}
package com.tc.remote;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class RMIQueryStatusClient {
public static void main(String[] args) {
try {
RMIQueryStatus stub = (RMIQueryStatus) Naming.lookup(RMIQueryStatusServer.RMI_URL);
RMIFileStatus status = stub.getFileStatus("爆炸");
System.out.println("遠程調用結果:" + status);
} catch (Exception e) { e.printStackTrace(); }
}
}
RMIQueryStatusServer main 方法,控制台輸出啟動成功。RMIQueryStatusClient,輸出遠程返回對象信息。

java.rmi.server.hostname。serialVersionUID。java.security.policy,JDK 8+ 通常無需額外配置。Oracle 官方 RMI 指南:RMI Documentation