【问题标题】:Node JS - file generator architectureNode JS - 文件生成器架构
【发布时间】:2018-10-12 09:51:26
【问题描述】:
需要将文件生成器 REST API 端点添加到 Web 应用程序。到目前为止,我想出了以下想法:
- 客户端向端点发送文件参数
- 服务器接收请求并使用 AMQP 将参数发送到专用服务
- 专用服务创建一个文件,将其放入服务器文件夹并发送响应该文件创建的文件名
- 端点通过文件向客户端发送响应
我不确定将 REST 请求保留在服务器上这么长时间是否是个好主意。但仍然不想使用带有生成链接或套接字的电子邮件。
我是否需要在请求中设置超时时间,以便在长时间等待后不会被拒绝?
据我所知,rest api 调用的最大超时时间为 120 秒。如果服务创建文件需要更多时间,那么我需要使用套接字,对吗?
【问题讨论】:
标签:
javascript
node.js
rest
express
amqp
【解决方案1】:
我处理类似的方式是做这样的事情:
- 客户端发送文件请求。
- 服务器将此添加到具有“已请求”状态的队列中,并几乎立即响应(向客户端)响应,其中包含用于检索文件的 URL。
- 一些后台线程/worker/webJob/etc 运行在与实际 Web 服务器不同的进程中,并不断监视队列 - 当它看到新条目出现时,它会将队列更新为“正在生成”状态并开始生成文件。完成后,它会将队列更新为“就绪”状态并继续...
- 当服务器收到下载文件的请求(通过它给客户端的 URL)时,它可以检查队列中文件的状态。如果还没有准备好,它可以给出一个表明这一点的响应。如果它准备好了,它可以简单地响应文件内容。
- 客户端可以使用对初始请求的响应在适当的时间长度后重新查询它提供的 url,或者每隔几秒或任何最合适的方式重复查询它。
您需要一些方法来存储系统的两个部分都可以轻松访问的队列 - 数据库是显而易见的,但您还可以使用其他东西...
这种方法可以避免在请求线程上做太多事情,或者在服务器编译文件时让客户端“挂起”请求。
这就是我在这种情况下(成功地)所做的。它还可以轻松地将生命周期等内容添加到队列中,因此文件也可以在一段时间后自动“过期”......