如何在 Spring Boot + Angular Web 应用程序中通知用户批量进度的更新?

问题描述 投票:0回答:1

我的应用程序有一个 Spring Boot 后端和一个通过 REST 端点调用后端的 Angular 前端。

我希望允许用户在服务器上启动批处理过程,其中涉及对外部系统进行大量 API 调用、处理数据和加载数据库。这可能需要几分钟才能运行。所以,我希望用户看到一个显示渐进式消息的屏幕,例如:

从外部网络服务请求索引...已收到。 100 件商品 查询。

对 Widget 数据进行 100 次 API 调用...发出 100 个请求... 95 成功,5 失败。

处理结果...完成。

写信给 数据库...已完成。

如何使用 Spring Boot 和 Angular 来实现这一目标?我相信,使用 Spring Boot,一切都是由对 URL 的 HTTP 请求触发的,并且所有这些都必须在数据发送回调用者(在本例中为 Angular 前端)之前运行(并完成)。那么,我应该设计一个 Angular 前端来协调一切并向后端发出所有这些数十或数百个请求吗?

或者: Spring Boot 中是否有一种方法可以创建一个端点,在批处理过程中而不是在批处理结束时多次发送回数据,这样我就可以简单地对前端进行编程来更新用户所看到的内容? 在我看来,这是最简洁的编码方式,也是后端和前端之间职责的正确分离。

angular spring-boot batch-processing progress-indicator
1个回答
0
投票

我不会在前端构建这个,繁重的工作应该在后端完成。您可以在各种问题中运行,浏览器缓慢,用户带宽问题,数据安全..

我会按照以下方式做一些事情。

后端

  • 您创建一个可以启动批处理过程的端点。端点返回一些唯一的ID,您可以使用它来查询批处理过程的状态。
  • 批处理启动时,您在 API 中启动另一个线程来处理批处理需要执行的所有工作。根据您的要求更新到缓存/数据库的批处理作业的状态。
  • 您创建一个端点,您可以在其中通过其 ID 检索批处理作业的状态。端点检查缓存/数据库中批处理作业的状态。

前端

创建一个可以启动批处理作业的页面。并在某个时间间隔、您的要求(每秒或按用户的要求?)查询其状态。 并根据您的要求和批次状态创建一些进度。

© www.soinside.com 2019 - 2024. All rights reserved.