ЦИТК-37 - Добавлена возможность использования прокси при отправке

This commit is contained in:
Dollerino 2023-10-19 17:47:51 +03:00
parent 4ff7fdeb66
commit 6908166e48
10 changed files with 90 additions and 11 deletions

View File

@ -48,7 +48,9 @@ let outGoing = {
//Максимальный размер пула подключений к БД для обработчика исходящих сообщений
nPoolMax: 4,
//Шаг инкремента подключений к БД в пуле обработчика исходящих сообщений
nPoolIncrement: 0
nPoolIncrement: 0,
//Глобальный адрес прокси-сервера
sProxy: null
};
//Параметры обработки очереди входящих сообщений

View File

@ -93,7 +93,7 @@ class ParusAppServer {
async onOutQStarted() {
//Сообщим, что запустили обработчик
await this.logger.info("Обработчик очереди исходящих сообщений запущен");
//Запускаем бслуживание очереди входящих
//Запускаем обслуживание очереди входящих
await this.logger.info("Запуск обработчика очереди входящих сообщений...");
try {
this.inQ.startProcessing({ services: this.services });
@ -217,7 +217,8 @@ class ParusAppServer {
outGoing: prms.config.outGoing,
dbConn: this.dbConn,
logger: this.logger,
notifier: this.notifier
notifier: this.notifier,
sProxy: prms.config.outGoing.sProxy
});
//Создаём обработчик очереди входящих
this.inQ = new iq.InQueue({
@ -231,7 +232,8 @@ class ParusAppServer {
this.srvAvlCtrl = new sac.ServiceAvailableController({
logger: this.logger,
notifier: this.notifier,
dbConn: this.dbConn
dbConn: this.dbConn,
sProxy: prms.config.outGoing.sProxy
});
//Скажем что инициализировали
await this.logger.info("Сервер приложений инициализирован");

View File

@ -64,6 +64,8 @@ class OutQueue extends EventEmitter {
this.logger = prms.logger;
//Запомним уведомитель
this.notifier = prms.notifier;
//Запомним глобальный адрес прокси-сервера
this.sProxy = prms.sProxy;
//Список обрабатываемых в текущий момент сообщений очереди
this.inProgress = [];
//Привяжем методы к указателю на себя для использования в обработчиках событий
@ -160,7 +162,8 @@ class OutQueue extends EventEmitter {
service: _.find(this.services, { nId: prms.queue.nServiceId }),
function: _.find(_.find(this.services, { nId: prms.queue.nServiceId }).functions, {
nId: prms.queue.nServiceFnId
})
}),
sProxy: this.sProxy
});
//Уменьшаем количество доступных обработчиков
this.nWorkersLeft--;

View File

@ -145,9 +145,10 @@ const appProcess = async prms => {
sQuery: prms.queue.blMsg === null ? "" : prms.queue.blMsg.toString()
});
}
/* Установим прокси, если требуется */
if (prms.service.sProxyURL) {
options.proxy = prms.service.sProxyURL;
// Если у сервиса указан прокси, либо у приложения установлен глобальный прокси
if (prms.service.sProxyURL || prms.sProxy) {
// Добавляем прокси с приоритетом сервиса
options.proxy = prms.service.sProxyURL ?? prms.sProxy;
}
//Дополним получившиеся параметры переданными в сообщении
if (prms.queue.sOptions) {
@ -513,7 +514,8 @@ const processTask = async prms => {
let res = await appProcess({
queue: q,
service: prms.task.service,
function: prms.task.function
function: prms.task.function,
sProxy: prms.task.sProxy
});
//Если результат обработки ошибка - пробрасываем её дальше
if (res instanceof ServerError) {

View File

@ -67,6 +67,8 @@ class ServiceAvailableController extends EventEmitter {
this.logger = prms.logger;
//Запомним подключение к БД
this.dbConn = prms.dbConn;
//Запомним глобальный адрес прокси-сервера
this.sProxy = prms.sProxy;
//Привяжем методы к указателю на себя для использования в обработчиках событий
this.serviceDetectingLoop = this.serviceDetectingLoop.bind(this);
} else {
@ -110,8 +112,18 @@ class ServiceAvailableController extends EventEmitter {
service.nSrvType == objServiceSchema.NSRV_TYPE_SEND
) {
try {
// Инициализируем параметры запроса
let options = {};
// Устанавливаем параметры запроса
options.url = service.sSrvRoot;
options.timeout = NNETWORK_CHECK_TIMEOUT;
// Если у сервиса указан прокси, либо у приложения установлен глобальный прокси
if (service.sProxyURL || this.sProxy) {
// Добавляем прокси с приоритетом сервиса
options.proxy = service.sProxyURL ?? this.sProxy;
}
//Отправляем проверочный запрос
await rqp({ url: service.sSrvRoot, timeout: NNETWORK_CHECK_TIMEOUT });
await rqp(options);
//Запрос прошел - фиксируем дату доступности и сбрасываем дату недоступности
service.dAvailable = new Date();
service.dUnAvailable = null;

View File

@ -77,6 +77,16 @@ const common = new Schema({
validateTerminateTimeout: path =>
`Таймаут останова сервера (${path}) должен быть целым числом в диапазоне от 1000 до 120000`
}
},
//Контроль версии Системы
bControlSystemVersion: {
type: Boolean,
required: true,
message: {
type: path =>
`Признак контроля версии Системы (${path}) имеет некорректный тип данных (ожидалось - Boolean)`,
required: path => `Не указан признак контроля версии Системы (${path})`
}
}
});
@ -220,6 +230,17 @@ const outGoing = new Schema({
validatePoolIncrementOutGoing: path =>
`Значение шага инкремента подключений к БД в пуле обработчика исходящих сообщений (${path}) должно быть целым числом в диапазоне от 0 до 10`
}
},
//Глобальный адрес прокси-сервера
sProxy: {
type: String,
required: false,
message: {
type: path =>
`Адрес прокси-сервера приложения (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path =>
`Не указан глобальный адрес прокси-сервера (${path})`
}
}
});

View File

@ -65,6 +65,15 @@ exports.OutQueueProcessorTask = new Schema({
message: {
required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
}
},
//Глобальный адрес прокси-сервера
sProxy: {
type: String,
required: false,
message: {
type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
}
}
});

View File

@ -66,6 +66,15 @@ exports.OutQueue = new Schema({
`Объект для рассылки уведомлений (${path}) имеет некорректный тип данных (ожидалось - Notifier)`,
required: path => `Не указан объект для рассылки уведомлений (${path})`
}
},
//Глобальный адрес прокси-сервера
sProxy: {
type: String,
required: false,
message: {
type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
}
}
});

View File

@ -37,7 +37,7 @@ exports.appProcess = new Schema({
schema: Queue,
required: true,
message: {
required: path => `Не указано обрабатываемое сообщение очреди (${path})`
required: path => `Не указано обрабатываемое сообщение очереди (${path})`
}
},
//Cервис-обработчик
@ -55,6 +55,15 @@ exports.appProcess = new Schema({
message: {
required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
}
},
//Глобальный адрес прокси-сервера
sProxy: {
type: String,
required: false,
message: {
type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
}
}
});

View File

@ -48,6 +48,16 @@ exports.ServiceAvailableController = new Schema({
`Объект для взаимодействия с БД (${path}) имеет некорректный тип данных (ожидалось - DBConnector)`,
required: path => `Не указан объект для взаимодействия с БД (${path})`
}
},
//Глобальный адрес прокси-сервера
sProxy: {
type: String,
required: false,
message: {
type: path =>
`Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
}
}
});