5

如何保存主要由 HTTP 请求组成的 node.js 应用程序的应用程序状态?

我在 Node.JS 中有一个脚本,它使用 RESTful API 将大量(10,000 多种)产品导入电子商务应用程序。API 对可以发出的请求数量有限制,我们正在努力克服这个限制。在之前的运行中,脚本退出Error: connect ETIMEDOUT可能是由于超出 API 限制。我希望能够尝试连接 5 次,如果连接失败,则在恢复限制后一小时后恢复。

在发生崩溃(断电、网络崩溃等)的情况下保存整个进度也是有益的。并且能够从它停止的地方恢复脚本。

我知道 Node.js 作为一个巨大的事件队列运行,所有 http 请求及其回调都被放入该队列(连同其他一些事件)。这使它成为保存当前执行状态的主要目标。其他令人愉快的(对于这个项目不是完全必要的)将能够在不同网络上的多台机器之间分配工作以增加吞吐量。

那么有没有现有的方法来做到这一点?也许是一个框架?或者我是否需要自己实现这个,在这种情况下,任何关于如何做到这一点的有用资源都将不胜感激。

4

1 回答 1

4

我不确定你说的是什么意思

我知道 Node.js 作为一个巨大的事件队列运行,所有 http 请求及其回调都被放入该队列(连同其他一些事件)。这使其成为保存当前执行状态的主要目标

如果您发现它与答案相关,请随时对此发表评论或阐述。

也就是说,如果您只是为这个特定任务寻找持久性机制,我可能会推荐Redis,原因如下:

  • 它允许对许多数据类型进行原子操作;例如,如果您在 Redis 中有一个名为的条目,num_requests_made它表示发出的请求数,您可以在 Redis 中使用 轻松增加这个数字INCR num_requests_made,并且它保证是原子的,从而更容易扩展到多个工作人员。
  • 它有几种数据类型可以证明对您的需求有用;例如,一个简单的字符串可以表示在特定时间段内发出的 API 请求数(如上一个要点);您可以将需要重新提交的失败 API 请求的详细信息存储在列表中;等等
  • 它提供了发布/订阅机制,允许您在程序的多个实例之间轻松通信。

如果这听起来很有趣或有用,并且您还不熟悉 Redis,我强烈建议您尝试交互式教程,它向您介绍了一些数据类型和命令。另一本不错的阅读材料是15 分钟 Redis 数据类型介绍

于 2012-06-16T19:53:56.057 回答