gpt4 book ai didi

Java Rest API 调用另一个 Rest 而不等待响应 - 在 JAX-RS 中

转载 作者:行者123 更新时间:2023-12-01 07:18:25 26 4
gpt4 key购买 nike

我有一个案例要在我的项目中实现。下面是一个必须实现的示例休息服务

    @GET
@Path("/test/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String getData(@PathParam("id") String id) {
//Some processing to get value of String
String result = doSomeProcessing();

//I want to return this result to GUI and call one more rest api
// and end this process without waiting for response from second
//call

new Thread(){
//call second rest api
}.start();

return result;

}

使用新线程调用第二个休息 API 并返回结果而不等待第二个休息 API 的响应,这是一个好方法吗?我还研究了异步休息调用,但它并不完全符合我的要求。请指教。提前致谢

最佳答案

避免启动Thread直接。考虑ExecutorService而是如下所示:

@Singleton
@Path("foo")
public class FooResource {

private ExecutorService executor;

@PostConstruct
public void onCreate() {

// Creates a thread pool that reuses a fixed number
// of threads operating off a shared unbounded queue
this.executor = Executors.newFixedThreadPool​(10);
}

@GET
public Response getFoo() {

String result = doSomeProcessing();

// Submits a Runnable task for execution
executor.submit(new LongRunningTask());

return Response.ok(result).build();
}

@PreDestroy
public void onDestroy() {

// Initiates an orderly shutdown in which previously submitted
// tasks are executed, but no new tasks will be accepted.
this.executor.shutdownNow();
}
}
public class LongRunningTask implements Runnable {

@Override
public void run() {

try {
// Simulate a long running task
// Don't do it in a real application
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

探索Executors API 了解如何创建 ExecutorService 的详细信息实例。

<小时/>

在 Java SE 和 Servlet 容器中,您可以使用 ExecutorService适合您长时间运行的任务。在 Java EE 容器中,您应该使用 ManagedExecutorService相反:

@Resource
ManagedExecutorService executor;

一旦它成为容器管理的资源,您就不需要手动实例化和处置它。

关于Java Rest API 调用另一个 Rest 而不等待响应 - 在 JAX-RS 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49193984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com