我每5分钟运行一次cron作业以从第3方API获取数据,从NodeJS应用程序一次可以是N个请求。下面是详细信息和代码示例:
1>每5分钟运行一次cron作业:
const cron = require('node-cron');
const request = require('request');
const otherServices= require('./services/otherServices');
cron.schedule("0 */5 * * * *", function () {
initiateScheduler();
});
2>获取要为其发起请求的元素的列表。可以接收N个元素。我在forEach循环中调用了请求函数(getSingleElementUpdate()
)
var initiateScheduler = function () {
//Database call to get elements list
otherServices.moduleName()
.then((arrayList) => {
arrayList.forEach(function (singleElement, index) {
getSingleElementUpdate(singleElement, 1);
}, this);
})
.catch((err) => {
console.log(err);
})
}
3>开始发起对singleElement的请求。请注意,如果我收到请求的成功(200)响应,则不需要任何回调。成功后,我只需要更新数据库条目即可。
var getSingleElementUpdate = function (singleElement, count) {
var bodyReq = {
"id": singleElement.elem_id
}
var options = {
method: 'POST',
url: 'http://example.url.com',
body: bodyReq,
dataType: 'json',
json: true,
crossDomain: true
};
request(options, function (error, response, body) {
if (error) {
if (count < 3) {
count = count + 1;
initiateScheduler(singleElement, count)
}
} else{
//Request Success
//In this: No callback required
// Just need to update database entries on successful response
}
});
}
我已经检查过:
request-promise:但是,成功请求后,我不需要任何回调。因此,我没有发现在代码中实现此优势。让我知道您是否有任何积极的看法要补充。
在以下方面,我需要您的帮助:
在步骤2的arrayList中接收到10个元素时,我已经检查了性能。现在,问题是我对在步骤2中开始接收100和1000个元素时没有清晰的愿景。 ,我需要您的帮助来确定是否需要针对该场景更新代码,或者是否遗漏了任何会降低性能的内容。另外,一次可以提出的最大请求数是多少。您的任何帮助都是很重要的。
谢谢!
答案 0 :(得分:1)
AFAIK对多个请求没有硬性限制。但是,至少要考虑两件事:您的硬件限制(内存/ CPU)和远程服务器延迟(它是否能够在下一批之前5分钟内响应所有请求)。如果不了解上下文,也无法预测您可能需要哪种缩放机制。
实际上,问题更多是与应用程序体系结构有关,而不是与某些特定的代码有关,因此您可能想尝试softwareengineering而不是SO。