如何根据保存的 mongodb 文档数据调度/排队任务 [NodeJS]

Posted

技术标签:

【中文标题】如何根据保存的 mongodb 文档数据调度/排队任务 [NodeJS]【英文标题】:How to schedule/queue a task based on saved mongodb document data [NodeJS] 【发布时间】:2021-06-16 06:13:39 【问题描述】:

我想在我的服务器中有一个功能,用户可以从 API 路由创建一个“jobScan”,例如“/create-scan-job”,基本上在创建一个 scanJob 时它将被保存在 mongodb 数据库中带有一个“scanDueDate”,它将用于排队一个任务,该任务将在用户输入的到期日期将扫描状态更改为“已完成”。

我怎样才能构建这样的东西?我在将数据保存在数据库中没有问题,但我如何“排队”它以在作为输入给出的 dueDate 上触发?

【问题讨论】:

【参考方案1】:

您可以使用agenda 或bull 包。

    议程将作业保存在 MongoDB 数据库中 Bull 在 Redis 中保存工作。

两者都支持 cron 作业。

【讨论】:

我看到为了拥有公牛,我需要有一个正在运行的redis服务器。有没有办法在一台运行的本地服务器中实现这一点? 是的,公牛在不同的端口上运行。端口号 6379。 你能给我链接一个关于如何用 nodejs 设置它的来源吗?意思是 redis 服务器,因为我在公牛文档中没有找到该示例。在此先感谢:) 你使用的是哪个操作系统? MacOS 很抱歉再次询问,但我是新手,所以 redis 和 nodejs 运行各自的服务器?【参考方案2】:

Agenda 正在使用 MongoDB 进行队列调度,但它有点不稳定,as you may see on the issues page。您也可以使用Bree,但它确实将作业队列存储在内存中。

至于这里已经通知的Bull或BullMQ,确实使用了Redis,作为队列存储。但它的文档描述似乎并不完整。我记得,Redis 不支持开箱即用的 Windows。所以如果你想在本地运行它,我强烈建议你使用the Redis Docker image。

另外,不要忘记用于任务队列的 GUI。你可以使用:

Agendash,(带有 Agenda)允许从界面手动创建作业。 Bull-board(带有 Bull 或 BullMQ),仅提供有关任务的只读数据。

【讨论】:

以上是关于如何根据保存的 mongodb 文档数据调度/排队任务 [NodeJS]的主要内容,如果未能解决你的问题,请参考以下文章

在mongodb中保存或更新文档时如何防止更新“updatedAt”字段?

如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?

如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?

如何使用计算值批量更新 MongoDB 中服务器上的文档?

如何像调度程序一样将大数据从 MongoDB 导入 SQL Server

如何根据 MongoDB 中的列表计数过滤文档? [复制]