我在我的請求中使用@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. HTTP請求客戶端超時默認設置
- 2. 爲所有http請求設置默認標頭不起作用
- 3. 在異步Web請求中設置請求屬性失敗。 C#
- 4. Netty Comet異步請求超時
- 5. AFNetworking設置POST請求的默認值
- 6. 故障設置異步請求結果
- 7. 即使連接超時和讀取超時設置爲默認(無限),接收請求超時?
- 8. 在哪裏設置所有請求的默認solr查詢參數
- 9. 爲Angular中的所有請求設置默認標題,除了選項
- 10. 在WinRT中向異步請求添加超時
- 11. Hibernate:設置默認查詢超時?
- 12. 如何在異步ng選項中設置默認值
- 13. 幫助! YUI異步GET請求使用HTTPS默認爲OPTIONS請求方法
- 14. 數據請求有時是異步的
- 15. 從C++設置OLE請求超時
- 16. 爲請求方法設置超時
- 17. 爲Android請求設置超時更新
- 18. 設置代理請求超時
- 19. 將計時器設置爲異步請求
- 20. AngularJS $ http服務請求的默認超時時間是多少?
- 21. 更改來自roku的CURL請求的默認超時時間
- 22. 獲取所有從默認設置
- 23. JAXWS - 設置WSDL請求超時所需的幫助
- 24. 在Phoenix中配置請求超時?
- 25. 如何在Watir中設置默認的頁面載入超時?
- 26. 如何在pytest中設置默認的每次測試超時?
- 27. FSharp.Data HTTP請求 - 無法設置請求超時
- 28. 從請求變量中設置表單字段的默認值
- 29. 請求超時 - 請求超時
- 30. 異步請求vaadin