首页 > 解决方案 > 如何在nodejs中进行作业调度?

问题描述

我有一个特殊的问题。我正在制作一个社交网络类型的应用程序。当我创建一个帖子并将其按计划在定义的时间发布(如 Gmail 邮件计划)时,我希望有一份工作来检查帖子的时区并根据不同国家/地区的时区自行发布。就像我安排它在美国晚上发布时一样,它应该在白天显示在亚洲用户的时间线中(只是一个大概的概括)。我怎样才能做到这一点?我应该运行一个 cron 作业还是有更好的方法来做到这一点?

任何阻止向技术堆栈添加其他东西的方法都将受到高度赞赏。

我正在使用 nodejs、postgre、mongo、redis 和 RabbitMQ

标签: node.jsmongodbpostgresqlrediscron

解决方案


首先,我想澄清一下 CRON。一些“待定”任务或脚本称为“Cron 作业”。Cron 作业非常适合常规操作,例如备份、删除文件(例如日志)等。但在其他情况下,最好在应用程序中实现业务逻辑。因为 cron 作业很难与您的应用程序一起扩展(在多个实例中运行),所以还必须对其进行监控,以便只有一个 cron 实例始终在运行……当然,您可以使用 k8s cron。

在你的情况下,我会做这样的事情:

  • 以 UTC 时间存储所有帖子(这将帮助您处理不同时区的用户)
  • 添加有关“不显示直到”的帖子信息
  • 以及在需要显示所有帖子时比较“当前时间”和“不显示直到”的附加条件

另一种方式,您可以使用rabbitmq(delayed messages)。时机成熟时在 nodejs 中处理此操作,rabbitmq 将通知 nodejs 有关任务。这可能是最好的解决方案,但有一件事......现在你必须使用RabbitMQ

我认为您应该更好地了解选择哪个选项。


推荐阅读