程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 Mono.Zip 和/或顺序 flatMap 上保存交易大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 Mono.Zip 和/或顺序 flatMap 上保存交易?

开发过程中遇到在 Mono.Zip 和/或顺序 flatMap 上保存交易的问题如何解决?下面主要结合日常开发的经验,给出你关于在 Mono.Zip 和/或顺序 flatMap 上保存交易的解决方法建议,希望对你解决在 Mono.Zip 和/或顺序 flatMap 上保存交易有所启发或帮助;

嗨,我需要在同一个事务中存储 2 条记录,它们可以按任何顺序保存,但我想让它异步。我采取了 2 种不同的方法。 第一个只使用 flatMap,所以保存到 db 发生在不同的异步上。但是,第二种方法使用 Mono.zip 然后返回我不太确定第二个的并行性以及 thenReturn 关于阻塞等待 zip 结束的后果。 有人可以带来一些光明吗? 谢谢

   1) @transactional
      public Mono<String> handle(CreateReceiptCommand createReceiptCommand) {
        return Mono.just(createReceiptCommand)
                .map(CreateReceiptCommand::getTxnumber)
                .flatMap(receiptRepository::existsByTxnumber)
                .log("ReceiptRepository.existsByTxnumber")
                .filter(exists -> !exists)
                .map(exists -> receiptMapper.map(createReceiptCommand))
                .flatMap(receiptRepository::savE)
                .log("ReceiptRepository.save")
                .map(this::createReceipt)
                .flatMap(outBoxmessageRepository::savE)
                .log("OutBoxRepository.save")
                .switchIfEmpty(Mono.error(() -> new ReceiptAlreadyExistProblem(createReceiptCommand.getTxnumber())))
                .thenReturn(createReceiptCommand.getTxnumber());
    }

   2) @transactional
    public Mono<String> handle(CreateReceiptCommand createReceiptCommand) {
        return Mono.just(createReceiptCommand)
                .filterWhen(command -> receiptRepository.existsByTxnumber(command.getTxnumber())
                        .map(exist -> !exist)
                        .log("ReceiptRepository.existsByTxnumber"))
                .switchIfEmpty(Mono.error(() -> new ReceiptAlreadyExistProblem(createReceiptCommand.getTxnumber())))
                .map(receiptMapper::map)
                .zipwhen(this::newOutBoxmessagE)
                .flatMap(tuple -> Mono.zip(
                        receiptRepository.save(tuple.getT1())
                                .log("ReceiptRepository.save"),outBoxmessageRepository.save(tuple.getT2())
                                .log("OutBoxRepository.save")))
                .thenReturn(createReceiptCommand.getTxnumber());
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的在 Mono.Zip 和/或顺序 flatMap 上保存交易全部内容,希望文章能够帮你解决在 Mono.Zip 和/或顺序 flatMap 上保存交易所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: