节点JS-文件生成器体系结构

时间:2018-10-12 09:51:27

标签: javascript node.js rest express amqp

需要将文件生成器REST API端点添加到Web应用程序。到目前为止,我已经提出了以下想法:

  1. 客户端将文件参数发送到端点
  2. 服务器接收请求,并使用AMQP将参数发送到专用服务
  3. 专用服务会创建一个文件,将其放入服务器文件夹中,并以文件名发送该文件的响应
  4. 端点将响应发送给客户端文件

我不确定将REST请求长时间保留在服务器上是否是一个好主意。但是仍然不希望将电子邮件与生成的链接或套接字一起使用。

我是否需要在请求中设置超时时间,以便在长时间的等待后不会被拒绝? 据我所知,REST API调用的最大超时为120秒。如果该服务需要更多时间来创建文件,那么我需要使用套接字,对吗?

1 个答案:

答案 0 :(得分:1)

我处理类似问题的方法是执行以下操作:

  1. 客户端发送文件请求。
  2. 服务器将此状态添加到处于“已请求”状态的队列中,并几乎立即以包含URL检索文件的响应(对客户端)进行响应。
  3. 某些后台线程/ worker / webJob / etc与实际的Web服务器在单独的进程中运行,并且一直在监视队列-当看到新条目出现时,它将队列更新为“正在生成”状态并开始生成文件。完成后,它将队列更新为“就绪”状态并继续...
  4. 服务器收到请求下载文件的请求时(通过它提供给客户端的URL),它可以检查队列中文件的状态。如果尚未准备好,它可以给出响应以表明这一点。如果已准备就绪,则只需提供文件内容即可。
  5. 客户端可以使用对初始请求的响应,在适当的时间长度后重新查询给出的url,或者每隔几秒钟或最合适的时间重复查询一次。

您需要某种方式来存储可以由系统的两个部分轻松访问的队列-数据库是显而易见的数据库,但是您还可以使用其他方法...

这种方法避免了在服务器编译文件时在请求线程上做太多事情或避免客户端在请求上“挂起”。

这就是我在这种情况下(成功)所做的事情。它还可以轻松地将生命周期之类的内容添加到队列中,因此文件也可以在一段时间后自动“过期” ...