2

在 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中做的正确方法吗?

4

1 回答 1

0

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

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

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

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

于 2020-09-18T06:28:50.120 回答