我有一个使用 Spark 框架在 Java 中创建的 REST API,但是现在正在对请求线程进行大量工作,这会显着减慢请求速度。
我想通过创建某种后台工作人员/队列来解决这个问题,这些工作人员/队列将从请求线程中完成所有需要的工作。服务器的响应包含客户端需要的数据(将显示的数据)。在这些示例中,客户端是 Web 浏览器。
这是当前周期的样子
- 从客户端到服务器的 API 请求
- 服务器做阻塞工作;几秒/分钟后来自服务器的响应
- 客户端收到响应。它包含响应中所需的所有数据
这就是我想要的
- 从客户端到服务器的 API 请求
- 服务器确实在线程外工作
- 客户端几乎立即收到来自服务器的响应,但它没有所需的数据。此响应将包含一些 ID(整数或 UUID),可用于检查正在完成的工作的进度
- 客户端定期检查正在完成的工作的状态,响应将包含状态(如百分比或时间估计)。一旦工作完成,响应也将包含我们需要的数据
我不喜欢这种方法的是它会使我的 API 变得非常复杂。如果我想获取任何数据,我将不得不提出两个请求。一个启动阻塞工作,另一个检查状态(并获取阻塞工作的结果)。不仅 API 会变得更复杂,后端也会变得更复杂。
这是有效的,还是有更好的方法来实现我想要完成的事情?