最近遇到一個(gè)問題, 某系統(tǒng), 有外部系統(tǒng)通過RMI調(diào)用來訪問此系統(tǒng). 現(xiàn)在有一個(gè)問題是, 如果當(dāng)此系統(tǒng)某調(diào)用花費(fèi)時(shí)間過長, 那么就需要使此次調(diào)用timeout. 而默認(rèn)地, timeout的時(shí)間是2小時(shí), 現(xiàn)在需要找到一種辦法縮短這個(gè)時(shí)間.
解決辦法
查閱資料發(fā)現(xiàn), 可以設(shè)置sun.rmi.transport.tcp.responseTimeout(Java1.4 and above)來達(dá)到這個(gè)效果. 在Sun RMI上測試通過.
測試方法, 首先, 讓某remote method執(zhí)行2分鐘左右, 模擬一個(gè)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?}
在客戶端執(zhí)行調(diào)用的時(shí)候使用如下代碼, 則可以避免2分鐘的調(diào)用等待, 使其盡快timeout, 釋放資源.
1?java?-Dsun.rmi.transport.tcp.responseTimeout=50?mongoose.TestClient
相關(guān)資料
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