如果我有一個服務可以進行RPC調用(比如說web服務,或者平靜的服務,或者只是爲了抓取url等數據),我可能會在5秒後超時嗎?您可以在x秒後進行rpc呼叫超時嗎?
我不希望它掛起,然後崩潰,如果遠程服務已關閉,而是嘗試x秒,如果它關閉,然後繼續進行下一個遠程服務調用。
如果我有一個服務可以進行RPC調用(比如說web服務,或者平靜的服務,或者只是爲了抓取url等數據),我可能會在5秒後超時嗎?您可以在x秒後進行rpc呼叫超時嗎?
我不希望它掛起,然後崩潰,如果遠程服務已關閉,而是嘗試x秒,如果它關閉,然後繼續進行下一個遠程服務調用。
如果它是一個獨立的應用程序,那麼你可以使用操作系統來安排它(例如Windows中的任務計劃程序)。如果它不是獨立的,那麼你可以將它製作成Java任務並使用Java的Timer來調度它。
看一看一個java.util.Timer中 這裏有一個例子 http://www.java2s.com/Code/Java/Development-Class/UsejavautilTimertoscheduleatasktoexecuteonce5secondshavepassed.htm
的RPC客戶端庫通常有可選的超時參數可用。如果請求沒有在需要的時間內完成,客戶端庫只需關閉連接。這些協議本身可能沒有超時。
你是如何做你的RPC類的?你正在使用什麼庫?
你使用什麼協議?它是http還是RMI?最好的方法是在連接通道上實現超時(如Socket)。如果這是你想做的事。如果你使用Apache HTTP Components然後做到這一點看看http://download.oracle.com/javase/1.5.0/docs/guide/net/properties.html
東西:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeoutMillis);
HttpConnectionParams.setSoTimeout(httpParams, socketTimeoutMillis);
你能安排該服務?例如,如果您使用的是基於Windows的操作系統,那麼您可以使用任務計劃程序來安排它嗎?請提供更多細節。 – 2010-08-13 19:06:04