kotlin - Quarkus:执行并行unis

标签 kotlin reactive-programming quarkus mutiny

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

    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。所有Unis都已完成(发出结果)后,您将获得元组(包含单个结果)。
您可以从代码中删除元组步骤,而改为使用combineWith
最后,请注意,如果Uni之一未完成(无论出于何种原因),则await().indefinitely()永远阻止调用者线程。我强烈建议使用await().atMost(...)

关于kotlin - Quarkus:执行并行unis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63843627/

相关文章:

java - 导入冲突,导入名称 'Toast' 不明确

objective-c - ReactiveCocoa takeUntil 和 takeWhile 不发送最后一个 "next"

java - Uni<Void> 如何在 REST 调用中获得失败或成功响应

java - JaCoCo 使用 Quarkus 跳过特定包

android - 如何使用改造 + 协程处理错误响应

kotlin - 期待成员声明与 ArrayList

android - Kotlin 1.7.10 与 Dagger "A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction"

ios - Return Observer.create 不返回并且旁边的代码不能使用 RxSwift 工作

java - 即使值存在,也无法单独从 Redis 加载值

hazelcast - 在 Quarkus 中配置集群 Vertx Eventbus 的问题