Jersey 回应与回应

Jersey 回应与回应,jersey,jax-rs,Jersey,Jax Rs,我想使用AsyncResponse返回一个临时重定向 下面的“工作”(因为没有错误),但似乎不是异步的(它一次处理一个请求) 这样行吗?如果我显式地需要启动一个新线程,比如at,那么返回的响应是什么样子的?我认为您没有正确地使用异步上下文。在我看来,您正在阻塞请求处理线程。您不应该在vertx中阻止此线程。做如下事情怎么样: @GET public void doLoad(@Suspended final AsyncResponse 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)。。我没有真正尝试代码,只是在文本编辑器中键入。谢谢我做了修改。