Quarkus:执行并行单元

Quarkus: execute parallel unis

在 quarkus / kotlin 应用程序中,我想同时启动多个数据库请求。我是 quarkys 的新手,我不确定我做的事情是否正确:

    val uni1 = Uni.createFrom().item(repo1).onItem().apply { it.request() }
    val uni2 = Uni.createFrom().item(repo2).onItem().apply { it.request() }

    return Uni.combine().all()
      .unis(uni1, uni2)
      .asTuple()
      .onItem()
      .apply { tuple ->
        Result(tuple.item1, tuple.item2) }
      .await()
      .indefinitely()

request()真的会并行吗?在 quarkus 中这样做是否正确?

是的,你的代码是正确的。

Uni.combine().all() 同时运行所有通过的 Unis。当所有 Uni 完成(发出结果)时,您将获得元组(包含各个结果)。

从您的代码中,您可以删除元组步骤并改用 combineWith

最后,请注意 await().indefinitely() 如果其中一个 Uni 未完成(无论出于何种原因),将永远阻止调用者线程。我强烈建议使用 await().atMost(...)