最近遇到一个问题, 某系统, 有外部系统通过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