最近遇到一个问题, 某系统, 有外部系统通过RMI调用来访问此系统. 现在有一个问题是, 如果当此系统某调用花费时间过长, 那么就需要使此次调用timeout. 而默认地, timeout的时间是2小时, 现在需要找到一种办法缩短这个时间.
解决办法
查阅资料发现, 可以设置sun.rmi.transport.tcp.responseTimeout(Java1.4 and above)来达到这个效果. 在Sun RMI上测试通过.
测试方法, 首先, 让某remote method执行2分钟左右, 模拟一个long time method.
 1 public void aMethod() throws RemoteException {
 2     
 3     //long time op.
 4     try {
 5         Thread.sleep(100000L);
 6     }catch (Exception e) {
 7         e.printStackTrace();
 8     }
 9     
10     System.out.println("It's a long time method.");
11     
12 }
在客户端执行调用的时候使用如下代码, 则可以避免2分钟的调用等待, 使其尽快timeout, 释放资源.
1 java -Dsun.rmi.transport.tcp.responseTimeout=50 mongoose.TestClient
相关资料
Re: Is there timeout parameter
Re: socket timeouts taking 2 hours
FAQ of RMI
Does RMI have a timeout period... 
Connection reset
sun.rmi Properties