所以我用NodeJS编写了简单的视频创建者脚本。
它在按预定的任务运行。
我有一个面板用PHP编写,用户输入详细信息并点击“提交新视频作业”按钮。这个新的工作是保存到DB与详细信息,jobId和status=“等待”数据。
PHP负责一次返回1状态,检查限制查询到1,然后在询问时使用jobID返回数据。
视频创建脚本每x秒请求该API请求新作业是可用的。
它有5项任务。
available=true。
available=true;
这些任务是异步的,所以每个任务都必须等待先前的任务才能完成。
现在,如果每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();
发布于 2021-07-12 19:03:09
虽然可以将数据库用作队列,但它通常被称为反模式(除了使用数据库进行日志记录之外),而且您需要:
那么,有任何方式/包/系统来完成此行为吗?
我使用免费形式的你的问题,感谢被安置的赏金建议:豆茎。
豆茎是一个简单、快速的工作队列。 它的接口是通用的,但最初的设计是通过异步运行耗时的任务来减少大容量web应用程序中页面视图的延迟。
它有您在问题中提到的语言(以及更多的语言)的客户端库,易于在生产中使用和运行。
发布于 2021-07-15 12:49:31
RabbitMQ也是一个很好的排队系统。
为什么?
它确实有很好的文档(包括javascript &php在内的许多语言的例子)。
教程在公开实际用例时很简单。
它有一个REST。
它附带了一个监视UI。
如何使用它来解决您的问题?
在作业生成器端:通过遵循教程1将消息(作业)发送到队列
若要使用nodejs过程来使用作业,请参见RabbitMQ的教程2
其他建议:
使用预取值1,publisher确认,这样您就可以确保当作业运行时,使用者的实例不会接收消息。
快速原型路线图:教程1.然后是教程2x)。在发送和接收消息之后,您可以探索可以在队列和消息上设置的选项。
Nodejs软件包:http://www.squaremobius.net/amqp.node/
发布于 2021-07-12 18:43:58
在一个非常标准的系统设计范例中,使用Apache或任何基于队列的实现(例如,RabbitMQ)所做的工作。您可以查看一下Kafka/rabbitmq,但基本上没有详细说明:
您可以继续查找:https://www.gentlydownthe.stream/和您将认识到您正在做的事情的相似之处。
在这里,您不需要自己poll,您需要订阅一个事件,其他事情将由相应的队列管理。
https://stackoverflow.com/questions/68074764
复制相似问题