我需要有关 Spring Reactive 的帮助,其中休息调用会发布 Json 对象列表,并且 Spring Boot 服务器应一一发送处理事件。
让我用一个例子来简单解释一下。
假设前端 UI 中有 20 个产品,用户选择所有要处理的产品。
每个产品在服务器端处理至少需要 1 分钟。每当处理每个产品时,服务器应发送 json 消息结构,如下所示
事件发送到前端 UI,以便用户能够看到服务器中每个产品处理的增量进度。
在 UI 中,它应该看起来像这样。
产品1加工成功
产品2加工成功
产品3失败
像这样.....
在服务器端,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秒后你就可以在浏览器中看到一一输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)