我在我的請求中使用@Suspended AsyncResponse response
,並在處理請求時啓動線程。當進程結束時,我試圖恢復響應,但RestEasy將請求標記爲已完成,因爲請求線程已完成,並且未在響應中設置超時。如果我設置超時,它可以正常工作,但我需要在每個希望實現的異步請求中設置超時。無論如何,水平設置超時到所有暫停的AsyncRequests?在所有異步請求中設置默認超時
2
A
回答
0
不幸的是,JAX-RS 2.0 specification,RESTEasy documentation和Jersey documentation沒有提及爲AsyncResponse
設置默認超時值。
的Jersey documentation提到下列:
缺省情況下,沒有在懸掛
AsyncResponse
實例定義超時。自定義超時和超時事件處理程序可以使用setTimeoutHandler(TimeoutHandler)
和setTimeout(long, TimeUnit)
方法來定義。setTimeoutHandler(TimeoutHandler)
方法定義了在超時達到時將被調用的處理程序。處理程序以響應代碼503
(來自Response.Status.SERVICE_UNAVAILABLE
)恢復響應。還可以定義超時間隔而不指定自定義超時處理程序(僅使用setTimeout(long, TimeUnit)
方法)。
因此,該解決方案將無法從您正在使用的解決方案不同:
@GET
public void longRunningOperation(@Suspended final AsyncResponse asyncResponse) {
// Register a timeout handler
asyncResponse.setTimeoutHandler(new TimeoutHandler() {
@Override
public void handleTimeout(AsyncResponse asyncResponse) {
asyncResponse.resume(Response.status(SERVICE_UNAVAILABLE)
.entity("Operation timed out. Please try again.").build());
}
});
// Set timeout
asyncResponse.setTimeout(15, SECONDS);
// Execute long running operation in new thread
executor.execute(new Runnable() {
@Override
public void run() {
executeLongRunningOp();
asyncResponse.resume("Hello async world!");
}
});
}
相關問題
- 1. 在異步請求中設置NSTimer
- 2. 如何設置請求超時異常
- 3. HTTP請求客戶端超時默認設置
- 4. 需要設置所有http請求的默認標頭
- 5. 爲所有http請求設置默認標頭不起作用
- 6. 在異步Web請求中設置請求屬性失敗。 C#
- 7. Netty Comet異步請求超時
- 8. AFNetworking設置POST請求的默認值
- 9. updatePanel設置異步類型請求
- 10. 故障設置異步請求結果
- 11. 異步請求多個URL,並且大多數請求超時
- 12. 即使連接超時和讀取超時設置爲默認(無限),接收請求超時?
- 13. 爲Angular中的所有請求設置默認標題,除了選項
- 14. 在哪裏設置所有請求的默認solr查詢參數
- 15. 如何設置savon默認超時值
- 16. Hibernate:設置默認查詢超時?
- 17. 在異步請求中使用超時回調
- 18. 在WinRT中向異步請求添加超時
- 19. 如何在異步ng選項中設置默認值
- 20. 設置超時與發送請求使用請求包在nodejs
- 21. 在DataGridView中設置所有列運行時間的默認值
- 22. 幫助! YUI異步GET請求使用HTTPS默認爲OPTIONS請求方法
- 23. 如何在'?'以外的SOAPUI請求xml中設置默認值
- 24. 根據請求在VCR中設置默認選項URI
- 25. 數據請求有時是異步的
- 26. 請求1.0.4異步請求
- 27. 異步請求
- 28. RestKit 0.27 - 設置請求超時
- 29. 爲請求方法設置超時
- 30. 從C++設置OLE請求超時