node.js - 在工作实例之间以最小重叠分配主题

标签 node.js mongodb heroku rabbitmq distributed-computing

我正在开发一个 Twitter 项目,使用他们的流 API,该项目使用 Node.js 在 Heroku 上构建。

我有一个我的应用程序需要处理的主题集合,这些主题是从 MongoDB 中提取的。我需要通过 API 跟踪每个主题,但需要确保每个主题仅跟踪一次。由于每个工作进程大约在 1 小时后过期,因此当工作进程收到 SIGTERM 时,它需要取消跟踪分配的每个主题,并将其再次释放回池中。

我一直在使用 RabbitMQ 在应用程序和工作进程之间进行通信,但是我有点卡住了。您是否可以就正确的方法提供任何好的示例或建议?

最佳答案

工作线程在收到 SIGTERM 时不能通过消息队列向应用程序发送消息吗?根据heroku docs on shutdown该进程在被强制终止之前会等待几秒 (10)。

所以你可以这样做:

// listen for SIGTERM sent by heroku
process.on('SIGTERM', function () {

    // - notify app that this worker is shutting down
    messageQueue.sendSomeMessageAboutShuttingDown();

    // - shutdown process (might need to wait for async completion
    // of message delivery to not prevent it from being delivered)
    process.exit()
});

或者,您可以将工作分解为更小的 block ,让工作人员仅“承担”最多运行几分钟甚至几秒钟的工作。您的主要应用程序应该是簿记员,如果一个进程没有在指定时间内完成其任务,则假定它已丢失并将该任务提供给另一个进程来处理。您或许还可以使用 confirms 来实现此行为在rabbitmq中。

关于node.js - 在工作实例之间以最小重叠分配主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030022/

相关文章:

javascript - Node : Connect router middleware

node.js - 在 Azure 网站上禁用请求验证

javascript - Mongoose .save() 和使用 update() 之间的区别

heroku - 在 Heroku 上查找 ipv4 地址

json - NodeJS Photoshop PSD 解析器 toJSON() 没有方法

node.js - Heroku+Node.js 如何克隆node_modules?

ruby-on-rails - 从 Ruby 脚本重新启动 Heroku 延迟的 Job Workers

ruby-on-rails - NoMethodError(Heroku 的 Logger 未定义方法 `flush'

javascript - 抛出新错误 ('Mongoose is not connected' );

mongodb - 在 mongodb 查询中使用 $lt 或 $gt 运算符