我在我的请求中使用@Suspended AsyncResponse response
,并启动线程来处理请求。当进程完成时,我尝试恢复响应,但是RestEasy将请求标记为已完成,因为请求线程已经完成,并且响应中没有设置超时时间。如果我设置超时时间,它可以正常工作,但我需要为每个想要实现的异步请求设置超时时间。有没有办法水平设置所有暂停的AsyncRequests的超时时间?
我在我的请求中使用@Suspended AsyncResponse response
,并启动线程来处理请求。当进程完成时,我尝试恢复响应,但是RestEasy将请求标记为已完成,因为请求线程已经完成,并且响应中没有设置超时时间。如果我设置超时时间,它可以正常工作,但我需要为每个想要实现的异步请求设置超时时间。有没有办法水平设置所有暂停的AsyncRequests的超时时间?
AsyncResponse
设置默认超时时间。
Jersey文档提到了以下内容: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!");
}
});
}