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(...)
在 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(...)