我需要有关 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/