gpt4 book ai didi

javascript - 根据来自 php 脚本的作业订单安排 cron 作业的更好方法

转载 作者:行者123 更新时间:2023-12-04 13:08:37 25 4
gpt4 key购买 nike

所以我在 NodeJS 中编写了简单的视频创建器脚本。

它正在按计划的 cron 作业运行。

我有一个用 PHP 编写的面板,用户输入详细信息并单击“提交新视频作业”按钮。这个新工作正在将 详细信息、jobId 和 status="waiting" 数据保存到数据库。

PHP API 负责一次返回1 个状态,检查status="waiting" 将查询限制为1 然后返回数据询问时的 jobID

视频创建脚本每 x 秒向 API 请求一次新作业是否可用。

它有 5 个任务。

可用=真。

  1. 检查是否有新工作订单(每 20 秒发送一次 GET 请求),如果有新工作;可用=假
  2. 获取详细信息(姓名、图片 url 等)
  3. 制作包含详细信息的视频。
  4. 将视频上传到 FTP
  5. 将数据发布到 API 以更新详细信息。并将这项工作标记为“完成”

可用=真;

这些任务是异步的,所以每个任务都必须等待上一个任务完成。

现在,如果每 20 秒有新工作可用,则获取或发布请求 api(时间无关紧要)对我来说似乎是不好的方式。

那么有什么方法/包/系统来完成这个行为吗?

代码示例:

const cron = require('node-cron');
let available=true;

var scheduler = cron.schedule(
'*/20 * * * * *',
() => {
if (available) {
makevideo();
}
},
{
scheduled: false,
timezone: 'Europe/Istanbul',
}
);


let makevideo = async () => {
available = false;
let {data} = await axios.get(
'https://api/checkJob'
);
if (data == 0) {
console.log('No Job');
available = true;
} else {
let jobid = data.id;
await createvideo();
await sendToFTP();

await axios.post('https://api/saveJob', {
id: jobid,
videoPath: 'somevideopath',
});
available = true;
}
};
scheduler.start();

最佳答案

RabbitMQ 也是一个很好的队列系统。

为什么?

它确实有很好的文档记录(许多语言的示例,包括 javascript 和 php)。

Tutorials在公开真实用例时很简单。

它有一个 REST API。

它附带一个监控 UI。


如何使用它来解决您的问题?

在作业生产者方面:通过以下方式将消息(作业)发送到队列 tutorial 1

要使用您的 nodejs 进程使用作业:请参阅 RabbitMQ 的 tutorial 2


其他建议:

使用预取值 1 和发布者确认,这样您就可以确保消费者实例不会在作业运行时接收消息。

快速原型(prototype)路线图:教程 1... 然后是教程 2 x)。发送和接收消息后,您可以探索可以在队列和消息上设置的选项

Nodejs 包:http://www.squaremobius.net/amqp.node/

PHP 包:https://github.com/php-amqplib/php-amqplib

关于javascript - 根据来自 php 脚本的作业订单安排 cron 作业的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68074764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com