如何使用 Spring 反应式通过增量进度更新逐一处理每个产品?

How to process each product one by one with incremental progress update using Spring reactive?

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

假设前端有20个产品UI,用户选择所有要处理的产品。 服务器端处理每个产品至少需要 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 反应方面,其余调用发送一堆产品,通过提供相应的一个一个地处理 以 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秒后在浏览器中看到一个一个的输出。