最近遇到一個問題, 某系統, 有外部系統通過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