Jersey 回应与回应
我想使用AsyncResponse返回一个临时重定向 下面的“工作”(因为没有错误),但似乎不是异步的(它一次处理一个请求)Jersey 回应与回应,jersey,jax-rs,Jersey,Jax Rs,我想使用AsyncResponse返回一个临时重定向 下面的“工作”(因为没有错误),但似乎不是异步的(它一次处理一个请求) 这样行吗?如果我显式地需要启动一个新线程,比如at,那么返回的响应是什么样子的?我认为您没有正确地使用异步上下文。在我看来,您正在阻塞请求处理线程。您不应该在vertx中阻止此线程。做如下事情怎么样: @GET public void doLoad(@Suspended final AsyncResponse asyncResponse,
这样行吗?如果我显式地需要启动一个新线程,比如at,那么返回的响应是什么样子的?我认为您没有正确地使用异步上下文。在我看来,您正在阻塞请求处理线程。您不应该在vertx中阻止此线程。做如下事情怎么样:
@GET
public void doLoad(@Suspended final AsyncResponse asyncResponse,
@QueryParam("path") String path) {
CompletableFuture<Response> future = veryExpensiveOperation(path);
future.thenAccept(resp -> asyncResponse.resume(resp));
}
private CompletableFuture<Response> veryExpensiveOperation(String path){
CompletableFuture<Response> completableFuture = new CompletableFuture<>();
new Thread(() -> {
//do expensive stuff here
completableFuture.complete(Response.ok().entity("Completed").build());
}).start();
return completableFuture;
}
@GET
public void doLoad(@Suspended final AsyncResponse,
@QueryParam(“路径”)字符串路径){
CompletableFuture=非常昂贵的操作(路径);
然后接受(resp->asyncResponse.resume(resp));
}
私有CompletableFuture veryExpensiveOperation(字符串路径){
CompletableFuture CompletableFuture=新的CompletableFuture();
新线程(()->{
//在这里做昂贵的事情
completableFuture.complete(Response.ok().entity(“Completed”).build());
}).start();
回归未来;
}
我认为您没有正确使用异步上下文。在我看来,您正在阻塞请求处理线程。您不应该在vertx中阻止此线程。做如下事情怎么样:
@GET
public void doLoad(@Suspended final AsyncResponse asyncResponse,
@QueryParam("path") String path) {
CompletableFuture<Response> future = veryExpensiveOperation(path);
future.thenAccept(resp -> asyncResponse.resume(resp));
}
private CompletableFuture<Response> veryExpensiveOperation(String path){
CompletableFuture<Response> completableFuture = new CompletableFuture<>();
new Thread(() -> {
//do expensive stuff here
completableFuture.complete(Response.ok().entity("Completed").build());
}).start();
return completableFuture;
}
@GET
public void doLoad(@Suspended final AsyncResponse,
@QueryParam(“路径”)字符串路径){
CompletableFuture=非常昂贵的操作(路径);
然后接受(resp->asyncResponse.resume(resp));
}
私有CompletableFuture veryExpensiveOperation(字符串路径){
CompletableFuture CompletableFuture=新的CompletableFuture();
新线程(()->{
//在这里做昂贵的事情
completableFuture.complete(Response.ok().entity(“Completed”).build());
}).start();
回归未来;
}
感谢您的支持,只需一个调整即可正常工作:接受(resp)应该是恢复(resp)?你一确认,我就接受答复。再次感谢。事实上,这是恢复(resp)和不接受(resp)。。我没有真正尝试代码,只是在文本编辑器中键入。谢谢我做了修改。感谢这一点,只需一个调整就可以很好地工作:接受(resp)应该是恢复(resp)?你一确认,我就接受答复。再次感谢。事实上,这是恢复(resp)和不接受(resp)。。我没有真正尝试代码,只是在文本编辑器中键入。谢谢我做了修改。