REST API Power BI — ошибка: подключение: превышено ограничение в 5 сокетов
Здравствуйте, уважаемые эксперты PBI REST API, буду признателен за любую поддержку по следующему вопросу. Попытка отправить данные из MongoDB Atlas в набор данных Power BI Push через Rest API. Однако я столкнулся со следующей проблемой: когда я делаю более 5 HTTP-запросов к PBI Rest API, он говорит
'Error: connect: exceeded the limit of 5 sockets'.
Я нашел следующую ссылку на этом веб-сайте, однако похоже, что решение там не найдено: Закрыть соединение сокета в request.js
function postDataToPowerBi(result) {
...
collection.findOne({"_id": item._id}).then(itemDoc => {
postOne(itemDoc, access_token);
});
...
}
function postOne(itemDoc, access_token){
var postData = JSON.stringify({
"rows": [
{
"Name": itemDoc.Name,
"name.1": itemDoc.name
}
]
});
// request option
var options = {
host: 'api.powerbi.com' ,
port: 443,
method: 'POST',
path: '/v1.0/myorg/groups/' + group_id + '/datasets/' + dataset_id + '/tables/' + table_name + '/rows',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + access_token,
// 'Content-Length': postData.length,
'Connection': 'Close'
}
};
// request object
var req = https.request(options, function (res) {
var result = '';
res.on('data', function (chunk) {
result += chunk;
});
res.on('end', function () {
console.log(res.statusCode);
});
res.on('error', function (err) {
console.log(err);
});
});
// req error
req.on('error', function (err) {
console.log(err);
});
req.on('close', function () {
console.log("request closed");
});
//send request witht the postData form
req.write(postData);
req.end();
}
1 ответ
Нашел объяснение поставленному вопросу. Power BI имеет максимум 5 ожидающих запросов строк POST на набор данных для push-наборов данных. Больше информации здесь:
https://docs.microsoft.com/en-us/power-bi/developer/embedded/push-datasets-limitations
Следовательно, единственный и гораздо лучший подход — размещать строки сразу, а не построчно. Пример ниже:
function postBulk(docs, access_token, firstRun){
if(firstRun){
deleteRows(access_token);
}
var postData = '{"rows": ' + JSON.stringify(docs) + '}';
// console.log(postData);
// request option
var options = {
host: 'api.powerbi.com' ,
port: 443,
method: 'POST',
path: '/v1.0/myorg/groups/' + group_id + '/datasets/' + dataset_id + '/tables/' + table_name + '/rows',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + access_token,
// 'Content-Length': postData.length,
// 'Connection': 'Close'
}
};
// request object
var req = https.request(options, function (res) {
var result = '';
res.on('data', function (chunk) {
result += chunk;
});
res.on('end', function () {
console.log("postBulk: " + res.statusMessage);
});
res.on('error', function (err) {
console.log("postBulk: " + err);
});
});
// req error
req.on('error', function (err) {
console.log("postBulk: " + err);
});
// req.on('close', function () {
// console.log("request closed");
// });
//send request witht the postData form
req.write(postData);
req.end();
}