java - 如何使用 Spring reactive 通过增量进度更新逐一处理每个产品?

标签 java spring spring-boot spring-webflux reactive

我需要有关 Spring Reactive 的帮助,其中 rest 调用发布 Json 对象列表,而 spring boot 服务器应该一个接一个地发送处理事件。 让我用一个例子来简要解释一下。

假设前端 UI 中有 20 个产品,用户选择所有要处理的产品。 服务器端处理每个产品至少需要 1 分钟。每当处理每个产品时,服务器应发送 json 消息结构为 将事件发送到前端 UI,以便用户能够看到服务器中每个产品处理的增量进度。

在 UI 中,它应该是这样的。

Product 1 processed successfully

Product 2 processed successfully

Product 3 failed

像这样......

在服务器端,java代码应该是这样的。请建议如何使用 Spring Reactive 实现。

public Flux<ProdModel> createAllCGs(List<Product> prodList) {

        for(Product p : prodList) {

            //Process here ...
        }

        //use Spring Reactor Flux

        //return Flux type object in the form of Json structure event not as Text Stream event.
    }

我知道有一些解决方法可以使用传统的轮询机制或一个一个地发送产品来实现它。 我的问题更多是在 Spring Reactive 方面,其余调用发送一堆产品,通过提供相应的一个一个地处理 以 json 格式响应到 UI 端。 我不知道这是否可能。如果您认为使用 Spring Reactive 是不可能的,那对我来说也很好,这样我就可以与提出此建议的架构师沟通。

最佳答案

我费了一番功夫才找到答案,我也是 Spring Reactive 的新手。我希望这个答案对其他人有帮助。

我在下面提供了代码片段。

public Flux<ProdModel> createAllCGs(List<Product> prodList) {
      return Flux.fromIterable(prodList)
            .map(
                prodModel -> {
                  System.out.println("Input Data VM ::: " + prodModel);
                  return getProdModel(reviewModel);
                })
            .delayElements(Duration.ofSeconds(3));
    }

    private getProdModel getProdModel(ProdModel prodModel) {
        logger.debug("Time Now: {}", LocalDate.now());
        ProdModel cgModel = new CGModel();
        cgModel.setCgName("some Name");
        cgModel.setMessage("some meaningful message");
        cgModel.setTimestamp(LocalDateTime.now().toString());
        return cgModel;
  }

如果你创建一个简单的GET类型的rest端点并使用上面的方法,你可以在3秒后在浏览器中看到一个一个的输出。

关于java - 如何使用 Spring reactive 通过增量进度更新逐一处理每个产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56701550/

相关文章:

java - Java libGdx : FreeTypeFontGenerator is not working (Black screen)

java - 求数组中奇数的总和

java - Spring Security HTTP状态406

java - 带有自定义 UserDetailsS​​ervice 的 Spring Boot

java - Spring Autowiring 在新的java对象中

java - SpringBoot WebService客户端: MultipartFile and String parameters

java - Spring Boot 无法反序列化包含 OffsetDateTime 的对象

java - System.out.println 如何在线程级别工作?

java - 在 tomcat 上运行简单的 hello restapi 时出现 404 响应

java - 为什么要分解不包括 spring-boot-starter-logging 的日志文件?