我是NodeJS的新手,想了解用于实现以下目标的最佳模式。
传入的REST API调用请求执行批处理操作(比如100项)。
然后,Express处理程序必须进行100次外部异步API调用,这可能需要120秒才能返回,但需要很长时间才能完成。
处理程序只返回ACK,然后将处理请求排队。 (在数据库或内存中说)
然后,我需要通过在parallell中进行外部API调用来处理每个请求: -
(A)每个API调用将返回可用的“空闲资源”数(在当前API调用服务之后)以进行其他并行调用。
(B)但是,这些API调用需要并行进行,如果后端的“空闲资源”数量少于定义的阈值,则不应尝试。
这个想法很简单: - 应用程序不应该进行太多的并行API调用。它应该尝试至少留出五个后端资源。
但是,由于可用资源的数量仅在第一次API调用之后可用,因此可以最初超过限制,然后稍后缩小。
在Java中我会这样做:
对于包含100个请求对象的传入批处理填充队列。 (在DB中存储状态后)
为队列提供固定数量的工作线程。
每个工作线程都会检查一个全局对象,该对象将维护可用资源的数量。
如果可用资源大于阈值,则进行API调用,并更新全局计数器。 (还更新DB以指示对请求批处理项进行的API调用。如果API调用因任何原因失败,则该项将重新提交到队列中)
我并不太关心优化运行的线程数或初始峰值等,只要有一个不错的尝试就是不要向后端发出太多请求。
我可以使用任何异步/线程池框架的建议吗?