【问题标题】:Best practices for Conditional Flow with Project ReactorProject Reactor 条件流的最佳实践
【发布时间】:2021-05-01 13:58:16
【问题描述】:

我正在使用 spring webfluxproject reactor 构建一个包含 2 层的 API:controllerservice .我的 API 发送和返回的所有 3 个端点 都用 Mono 包装了请求/响应。 在服务层中,我有两个类:第一个使用 Mono 响应调用多个 Web 客户端,第二个是这些调用的类集成。我一直在努力构建 Mono 调用的“管道”,因为业务流程要求我需要调用 webclient 1,进行一些验证,使用它的响应并调用 webclient 2,如果通过了 webclient 4,则执行验证调用 webclient 3 等等...我尝试过使用 flatmap,但对我来说创建这样的 Mono 条件流并不自然:

Business Flow Chart

正如您在图表中看到的那样,对于我来说,实现响应式 Web 客户端调用的条件流并不是一个简单的方法。 有一个最佳实践可以做到这一点,而无需调用平面地图和地图的嵌套调用,并且我的代码具有良好的可读性?

【问题讨论】:

    标签: java web reactive-programming spring-webflux project-reactor


    【解决方案1】:

    您可以将条件语句放置到flatMap 并使用 switchIfEmpty 返回其他发布者。一个简短的例子:

    myService.executeWc1() // returns Mono
            .flatMap(result -> myService.executeWc2(result))
            .flatMap(result -> validator.validate(result))
            .handle((result, sink) -> {
                if (result) { // validation is passed
                    sink.success(true);
                }
                sink.success();
            })
            .flatMap(result -> myService.doSomeWork()
                    .flatMap(r -> myService.executeWc3())
                    .flatMap(r -> myService.doSomeWorkAgain())
                    .flatMap(r -> myService.executeWc4()))
            .switchIfEmpty(myService.executeWc4())
    

    等等……

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多