2015-12-15 61 views
0

我正在使用Apache commons HTTP客戶端API從Java代碼使用REST Web服務。如果在連接管理器參數中配置的套接字超時值內沒有響應返回,則會發生套接字超時異常。在線程返回調用方類的異常的情況下,即使REST服務稍後幾秒鐘返回響應,也會丟失。如何在發生超時後返回響應

是否有可能創建一個新的線程,即使在超時後仍會監聽服務,並且只是記錄響應,而主線程將異常返回給調用方類?

有沒有更好的方法來實現這個目標?

謝謝。

回答

0

您最可能尋找的模式涉及異步請求。對於您發佈的每個操作,您都會創建一個唯一的「作業」ID,併爲該作業狀態指定一個特定的URL。開始作業後,您可以查詢該特定作業實例的狀態。例如:

  1. POST到/動作
  2. 返回202 Accepted &包括Location/動作/結果/ 1234
  3. 立即得到/動作/結果/ 1234,以確定它的狀態。
    • 如果它返回一個2xx,你的工作就完成了。
    • 如果它返回404,請等待10秒(或其他)並再試一次。
  4. 一旦你對結果滿意,發出一個DELETE /動作/結果/ 1234後自己清理。

當然,如果工作沒有完成,您不必返回404,還有其他檢查狀態的策略 - 關鍵是它是後續調用。

+0

我想在同步調用中實現該功能。 – user1919581

+0

你提出第二個線程的這一事實意味着一個異步調用。拋開這個問題,你說你只是想把結果記錄到客戶端 - 這是否意味着你不需要根據返回值做出決定?正如在第一個電話會發生並忘記,你的第二個線程可以監聽並記錄結果? – SireInsectus

相關問題