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

如何结合两个或多个参数化Monos Webflux最佳实践

司空俊雄
2023-03-14

因此,我调用一个服务“ServiceA”,它通过webclient进行外部调用,返回一个mono,然后我想调用另一个服务“serviceB”,它也进行类似的外部调用,这次从“ServiceA”mono传递一些数据,可能还有一些其他外部参数。

Mono<ResponseA> responseAmono = serviceA.getdataA("some parameter");
Mono<ResponseB> responseBmono = serviceB.getdataB("data from responseAmono", "some parameter")

目前我有这个实现。

responseAmono
        .doOnSuccess(data -> {
            if (data.field == true) {
                serviceB.getdataB(data, "some parameter");
            }
        })
        .subscribe(x -> {}, e -> sout("serviceA Subscription Error! "+ e.getMessage()));

但是我面临线程池的挑战,因为PoolAcquirePendingLimitException

那么,将这两个单声道结合起来以获得良好性能的最佳策略是什么?

以及在调用内部mono“serviceB”时分离关注点。

笔记I订阅也在serviceB上实现。

共有1个答案

艾浩广
2023-03-14

doOnSuccess()应仅针对同步副作用而不是反应性操作调用。如果您实际上是在doOnSuccess()调用中阻塞,这可能就是您遇到线程问题的原因。

相反,flatMap()。如果您仍然希望返回服务A的结果,而忽略服务B的结果,则可以按如下类似方式执行此操作:

responseAmono
    .flatMap(data -> {
        if (data.field == true) {
            return serviceB.getdataB(data, "some parameter").thenReturn(data);
        }
        else {
            return Mono.just(data);
        }
    })

 类似资料:
  • 问题内容: 我正在使用JPA 2.0 /hibernate验证来验证我的模型。我现在遇到一种情况,必须验证两个字段的组合: 该模型是无效的,如果都和都null和其他有效。 如何使用JPA 2.0 / Hibernate执行这种验证?使用简单的注释,两个吸气剂都必须为非null才能通过验证。 问题答案: 对于多属性验证,应使用类级别的约束。摘自 Bean Validation Sneak Peek第

  • 问题内容: 我有一个库存表,我想创建一个报告,以显示订购商品的频率。 “库存”表: 基本上,我需要将这两个查询结合在一起。 查询打印库存余额: 打印销售统计信息的查询 我认为某种JOIN可以完成这项工作,但我不知道如何将查询粘合在一起。 所需的输出: 这仅是示例。也许我将需要添加更多条件,因为有更多列。是否存在将多个查询组合在一起的通用技术? 问题答案:

  • 问题内容: 我正在尝试搜索我正在构建的Django网站,在该搜索中,我正在搜索3种不同的模型。为了在搜索结果列表上进行分页,我想使用一个通用的object_list视图来显示结果。但是要做到这一点,我必须将3个查询集合并为一个。 我怎样才能做到这一点?我已经试过了: 但这是行不通的。当我尝试在通用视图中使用该列表时出现错误。该列表缺少克隆属性。 有谁知道我如何合并三个列表和? 问题答案: 将查询集

  • 这是因为检查点只存储了其中一个数据流的偏移量吗?浏览Spark结构流文档,似乎可以在Spark 2.2或>中进行流源的联接/联合

  • 本文向大家介绍Python中将两个或多个list合成一个list的方法小结,包括了Python中将两个或多个list合成一个list的方法小结的使用技巧和注意事项,需要的朋友参考一下 python中,list这种数据结构很常用到,如果两个或者多个list结构相同,内容类型相同,我们通常会将两个或者多个list合并成一个,这样我们再循环遍历的时候就可以一次性处理掉了。所以如何将两个或者多个list合

  • 问题内容: 我想合并两个或多个视频文件(它们可能是两个mp4或两个3gp或任何其他格式)。 问题答案: 您可以使用的最通用的工具是ffmpeg(如上面@Jeremy所述),但是在手机上使用它需要做一些工作。它也是LGPL许可的,其某些编码器(特别是x264)是GPL。 如果您要连接的两个文件都使用类似的编码,并且包含在从MP4派生的文件格式中(例如3GP),那么一个更简单的解决方案是使用纯Java