当前位置: 首页 > 知识库问答 >
问题:

在Spring Webflux中组合多个单声道

朱皓
2023-03-14
    mainService.getAllBranch()
            .flatMapMany(branchesList -> {
                List<Branch> branchesList2 = (List<Branch>) branchesList.getData();
                List<Mono<Transaction>> trxMonoList= new ArrayList<>();

                branchesList2.stream().forEach(branch -> {
                    trxMonoList.add(mainService.getAllTrxByBranchId(branch.branchId));
                });
                return Flux.concat(trxMonoList); // <--- is there any other way than using concat?
            })
            .collectList()
            .flatMap(resultList -> combineAllList());
    interface MainService{
            Mono<RespBody> getAllBranch();
            Mono<RespBody> getAllTrxByBranchId(String branchId); //will return executed url ex: http://trx.com/{branchId}
    }
  1. 获取所有分支
  2. 遍历所有brancheslist2并将其添加到trxmonolist
  3. 返回flux.concat,这是我不确定这样做是否正确的地方。但它起作用了
  4. 合并所有列表

我只是困惑,这是在我的上下文中使用flux的正确方式吗?或者有没有什么更好的方法来实现我正在努力做的事情?

共有1个答案

纪秋月
2023-03-14

您需要稍微将代码重构为反应式代码。

 mainService.getAllBranch()
        .flatMapMany(branchesList -> Flux.fromIterable(branchesList.getData())) (1)
        .flatMap(branch -> mainService.getAllTrxByBranchId(branch.branchId))    (2)
        .collectList()
        .flatMap(resultList -> combineAllList());

1)从列表中创建分支通量;

2)遍历每个元素并调用一个服务。

您不应该在Reactor中使用Stream API,因为它有相同的方法,但对多线程进行了适配和优化。

 类似资料:
  • 我的理解是单声道 我说得对吗? 如果没有,单声道之间的区别是什么

  • 我最近一直在学习使用Java中的reactor库和Spring框架进行反应式编程,并且在很大程度上我已经能够掌握它。然而,我发现自己有好几次遇到同样的情况,我想知道我哪里出了问题。 我正在努力解决的问题的要点是,我经常想用mono做一些事情,比如找到一些补充数据,然后将其添加回原始mono中。zip函数在我看来是一个理想的候选函数,但最终我订阅了两次原始mono,这不是我的意图。 这里有一个人为的

  • 我们使用的是Spring数据,当我们调用时,我们收到的是

  • 我想根据一些条件将结果从两个单声道组合起来。这两个单声道都是网络客户端调用的结果: 第一个是期望快速响应的单个呼叫。 第二个是几个响应缓慢的电话的组合。 如果第一个单声道的结果满足某些条件,则“取消”第二个单声道的想法可以节省时间并避免不必要的网络调用。如果第一个单声道的结果不够,请使用第二个单声道。 一个静态编程语言代码示例来解释我的想法: 更新: 更清楚的是,让我们假设平凡的结果在1秒内出现,

  • 我正在尝试使用SpringBoot2.0和新的reactive webFlux库。我想知道如何将通过无阻塞WebClient进行的两个调用的结果返回给我的Springboot API的调用者。我的代码是: 然而,如果我这样称呼它,我得到的回应是 而不是SearchResponse对象的内容。我觉得我可能错过了一个基本的点,这是如何工作的!我的想法是,因为WebClient没有阻塞,所以我可以向we

  • 本文向大家介绍如何在TestNG中将多个组合并为单个Test?,包括了如何在TestNG中将多个组合并为单个Test?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助测试组功能将多个组组合到TestNG中的单个Test中。 示例 用组测试xml文件。 要从测试用例集合中运行一组测试用例,我们必须在testng xml文件中定义<groups>。在这里,testNG xml包含与单个Test相