ЦИТК-936 - Добавление таймаутов для реквеста #5
@ -24,7 +24,8 @@ const {
|
|||||||
getMQTTConnectionSettings,
|
getMQTTConnectionSettings,
|
||||||
getKafkaBroker,
|
getKafkaBroker,
|
||||||
getKafkaAuth,
|
getKafkaAuth,
|
||||||
getURLProtocol
|
getURLProtocol,
|
||||||
|
wrapPromiseTimeout
|
||||||
} = require("./utils"); //Вспомогательные функции
|
} = require("./utils"); //Вспомогательные функции
|
||||||
const { ServerError } = require("./server_errors"); //Типовая ошибка
|
const { ServerError } = require("./server_errors"); //Типовая ошибка
|
||||||
const objOutQueueProcessorSchema = require("../models/obj_out_queue_processor"); //Схема валидации сообщений обмена с бработчиком очереди исходящих сообщений
|
const objOutQueueProcessorSchema = require("../models/obj_out_queue_processor"); //Схема валидации сообщений обмена с бработчиком очереди исходящих сообщений
|
||||||
@ -359,8 +360,12 @@ const appProcess = async prms => {
|
|||||||
default:
|
default:
|
||||||
//Установим флаг возврата полного ответа (и тела и заголовков)
|
//Установим флаг возврата полного ответа (и тела и заголовков)
|
||||||
options.resolveWithFullResponse = true;
|
options.resolveWithFullResponse = true;
|
||||||
|
//Установим таймаут подключения
|
||||||
|
options.timeout = prms.function.nTimeoutConn ? prms.function.nTimeoutConn : null;
|
||||||
//Отправляем запрос
|
//Отправляем запрос
|
||||||
serverResp = await rqp(options);
|
serverResp = prms.function.nTimeoutAsynch
|
||||||
|
? await wrapPromiseTimeout(prms.function.nTimeoutAsynch, rqp(options))
|
||||||
|
: await rqp(options);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//Сохраняем полученный ответ
|
//Сохраняем полученный ответ
|
||||||
|
@ -403,6 +403,22 @@ const getURLProtocol = sURL => {
|
|||||||
return sURL.substring(0, 1) === "/" ? SPROTOCOL_HTTP : new URL(sURL).protocol.slice(0, -1);
|
return sURL.substring(0, 1) === "/" ? SPROTOCOL_HTTP : new URL(sURL).protocol.slice(0, -1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Обёртывание промиса в таймаут исполнения
|
||||||
|
const wrapPromiseTimeout = (timeout, promise) => {
|
||||||
|
if (!timeout) return promise;
|
||||||
|
let timeoutPid;
|
||||||
|
const timeoutPromise = new Promise((resolve, reject) => {
|
||||||
|
const sMessage = `Истёк интервал ожидания (${timeout} мс) завершения асинхронного процесса.`;
|
||||||
|
let e = new Error(sMessage);
|
||||||
|
e.error = sMessage;
|
||||||
|
timeoutPid = setTimeout(() => reject(e), timeout);
|
||||||
|
});
|
||||||
|
return Promise.race([promise, timeoutPromise]).finally(() => {
|
||||||
|
if (promise.promise().isPending()) promise.cancel();
|
||||||
|
if (timeoutPid) clearTimeout(timeoutPid);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
//-----------------
|
//-----------------
|
||||||
// Интерфейс модуля
|
// Интерфейс модуля
|
||||||
//-----------------
|
//-----------------
|
||||||
@ -428,3 +444,4 @@ exports.getMQTTConnectionSettings = getMQTTConnectionSettings;
|
|||||||
exports.getKafkaBroker = getKafkaBroker;
|
exports.getKafkaBroker = getKafkaBroker;
|
||||||
exports.getKafkaAuth = getKafkaAuth;
|
exports.getKafkaAuth = getKafkaAuth;
|
||||||
exports.getURLProtocol = getURLProtocol;
|
exports.getURLProtocol = getURLProtocol;
|
||||||
|
exports.wrapPromiseTimeout = wrapPromiseTimeout;
|
||||||
|
@ -398,5 +398,21 @@ exports.ServiceFunction = new Schema({
|
|||||||
validateErrNtfMail: path =>
|
validateErrNtfMail: path =>
|
||||||
`Неверный формат списка адресов E-Mail для оповещения об ошибке исполнения сообщения очереди для функции обработки (${path}), для указания нескольких адресов следует использовать запятую в качестве разделителя (без пробелов)`
|
`Неверный формат списка адресов E-Mail для оповещения об ошибке исполнения сообщения очереди для функции обработки (${path}), для указания нескольких адресов следует использовать запятую в качестве разделителя (без пробелов)`
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Таймаут сетевого подключения (мс)
|
||||||
|
nTimeoutConn: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path => `Таймаут сетевого подключения функции сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Таймаут асинхронной отправки (мс)
|
||||||
|
nTimeoutAsynch: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path => `Таймаут асинхронной отправки функции сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user