RMI的优缺点是什么?
优缺点类似于任何RPC(远程过程调用)系统。 表面上看来很简单,因为实际上是远程的对象可以像本地对象一样处理。
这似乎对编程的简易性有很大好处,但却存在隐藏的成本。 分布式系统存在延迟和部分故障的问题,程序员必须意识到这一点。 调用远程方法可能会受到安全性、延迟问题、网络故障等潜在故障的影响。 掩盖这些问题可能会导致可靠性灾难。
根据我的经验:
优点:
您可以实现两个如下所示的接口:
通用任务接口:
public interface Task<T extends Serializable> extends Serializable {
T execute();
}
RMI 接口:
public interface RmiTask extends Remote {
<T extends Serializable> T executeTask(Task<T> task) throws RemoteException;
}
RmiTask
实现:public class RmiTaskExecutor implements RmiTask {
public <T extends Serializable> T executeTask(Task<T> task) {
return task.execute();
}
}
示例客户端Task
实现:
public class IsFileTask implements Task<Boolean> {
final String path;
public IsFileTask(String path) {
this.path = path;
}
public Boolean execute() {
return new File(path).isFile();
}
}
缺点:
PassedObject
上调用method()
,但是神奇的客户端可能会覆盖此方法并在其中执行任何操作...Callable
中,并使用定义的超时运行它们)。