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}
}
brancheslist2
并将其添加到trxmonolist
flux.concat
,这是我不确定这样做是否正确的地方。但它起作用了我只是困惑,这是在我的上下文中使用flux
的正确方式吗?或者有没有什么更好的方法来实现我正在努力做的事情?
您需要稍微将代码重构为反应式代码。
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相