Java 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

我想知道Quarkus中对每个请求运行后台任务的良好实践是什么

大概是这样的:

    @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您可能希望将您的评论作为答案发布:)