【问题标题】:Spring react process more mono in monoSpring反应过程更单声道
【发布时间】:2018-03-22 09:00:13
【问题描述】:

我有这样的方法:

public Mono<Double> calculate(OperandDto dto) {
    Mono<Double> dbResult1Mono = mongoReactRepo.findByMyLogic(dto);
    Mono<Double> dbResult2Mono = mongoReactRepo.findByMyOtherLogic(dto);

    // ? Multiply these results (dbResult1Mono * dbResult2Mono), and return with Mono<Double> ?
}

我想将 2 个 Mono 对象的结果相乘,并以反应方式返回一个新的 Mono。

谁能帮我怎么做?

谢谢

【问题讨论】:

    标签: spring spring-webflux reactor


    【解决方案1】:

    你可以使用Flux.combineLatest():

        Mono<Double> dbResult1Mono = Mono.just(2d);
        Mono<Double> dbResult2Mono = Mono.just(5d);
    
       return Flux.combineLatest(dbResult1Mono, dbResult2Mono, (r1, r2) -> r1 * r2).next();
    

    【讨论】:

    • 看起来不错,谢谢,有没有办法像在nodejs中一样使用Mono:myVar = await Mono.just(2d);或者如果我有 1 个单声道,如何处理结果,并返回一个新的 Mono ?
    • 对不起,我不熟悉node.js。关于处理单声道的结果并得到单声道 - 你可以在这里查看我的答案:stackoverflow.com/a/49156111/2304545 这与使用 Java 流非常相似。您创建诸如 map、flatMap、zip 等操作的管道,并接收结果 Mono 或 Flux,当有人订阅它时,Reactor 将处理它们。
    • 非常感谢。这很有帮助。其实我有一个非常简单的方法,我想测试一下反应方式比普通方式更快。在我的测试中,反应方式似乎比阻塞方式慢 2 倍。你能帮我吗,我的代码有什么问题?我会支付你的时间......非常感谢,这对我很重要:)
    • 这是我的代码:github.com/loxon-lab/reactive-programming/blob/master/…,calculateStream 方法是主要方法。
    • 或许最大的问题出在这一行:calculateReactive(e).block();不要使用 block() ,因为它是同步方法。我建议使用 flatMap() 重写该块试试这个:alcObj.flatMap(e -> calculateReactive(e)) 而不是 calcObj.map(e -> { return calculateReactive(e).block(); });
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多