Java Quarkus中每个请求启动后台任务的正确方法
我想知道Quarkus中对每个请求运行后台任务的良好实践是什么 大概是这样的:Java Quarkus中每个请求启动后台任务的正确方法,java,multithreading,quarkus,reactive,mutiny,Java,Multithreading,Quarkus,Reactive,Mutiny,我想知道Quarkus中对每个请求运行后台任务的良好实践是什么 大概是这样的: @POST() @Path("v1") public Uni<Response> buildSomething() { // start a thread to build things in the background // when completed, save the id in DB // retur
@POST()
@Path("v1")
public Uni<Response> buildSomething() {
// start a thread to build things in the background
// when completed, save the id in DB
// return immediately
return Uni.createFrom().item(Response.accepted().build());
}
@GET()
@Path("v1")
public Uni<List<Long>> getSomethingThatHasBeenBuilt() {
// fetch ids from DB
return fetchIdsFromDB();
}
@POST()
@路径(“v1”)
公共大学{
//启动一个线程在后台构建东西
//完成后,将id保存在DB中
//立即返回
返回Uni.createFrom().item(Response.accepted().build());
}
@得到()
@路径(“v1”)
公共大学得到了一些东西{
//从数据库获取ID
返回fetchIdsFromDB();
}
我希望我可以做一些像Go例程的事情,我可以为它设置超时并记录错误。我怀疑有人可能会注入一个vertx实例,并在工作线程池中执行该任务,但我不知道如何实现该任务。叛变本身已经是被动的。因此,如果您在代码中使用
Uni
或Multi
在后台启动计算,它将并发/异步运行。我的进程可能需要10分钟,我希望立即将响应返回给客户端。好的,如果任务长时间运行,它不必在I/O线程上运行。。。是否使用框架(如)作为选项?您可以@Inject org.eclipse.microfile.context.ManagedExecutor
,它由Quarkus主工作线程池支持,并在那里提交任务。或者创建自己的线程池,如果任务确实需要几分钟的时间。@Ladicek您可能希望将您的评论作为答案发布:)