forked from CITKParus/P8-ExchangeService
ЦИТК-37 - Добавлена возможность использования прокси при отправке
This commit is contained in:
parent
4ff7fdeb66
commit
6908166e48
@ -48,7 +48,9 @@ let outGoing = {
|
|||||||
//Максимальный размер пула подключений к БД для обработчика исходящих сообщений
|
//Максимальный размер пула подключений к БД для обработчика исходящих сообщений
|
||||||
nPoolMax: 4,
|
nPoolMax: 4,
|
||||||
//Шаг инкремента подключений к БД в пуле обработчика исходящих сообщений
|
//Шаг инкремента подключений к БД в пуле обработчика исходящих сообщений
|
||||||
nPoolIncrement: 0
|
nPoolIncrement: 0,
|
||||||
|
//Глобальный адрес прокси-сервера
|
||||||
|
sProxy: null
|
||||||
};
|
};
|
||||||
|
|
||||||
//Параметры обработки очереди входящих сообщений
|
//Параметры обработки очереди входящих сообщений
|
||||||
|
@ -93,7 +93,7 @@ class ParusAppServer {
|
|||||||
async onOutQStarted() {
|
async onOutQStarted() {
|
||||||
//Сообщим, что запустили обработчик
|
//Сообщим, что запустили обработчик
|
||||||
await this.logger.info("Обработчик очереди исходящих сообщений запущен");
|
await this.logger.info("Обработчик очереди исходящих сообщений запущен");
|
||||||
//Запускаем бслуживание очереди входящих
|
//Запускаем обслуживание очереди входящих
|
||||||
await this.logger.info("Запуск обработчика очереди входящих сообщений...");
|
await this.logger.info("Запуск обработчика очереди входящих сообщений...");
|
||||||
try {
|
try {
|
||||||
this.inQ.startProcessing({ services: this.services });
|
this.inQ.startProcessing({ services: this.services });
|
||||||
@ -217,7 +217,8 @@ class ParusAppServer {
|
|||||||
outGoing: prms.config.outGoing,
|
outGoing: prms.config.outGoing,
|
||||||
dbConn: this.dbConn,
|
dbConn: this.dbConn,
|
||||||
logger: this.logger,
|
logger: this.logger,
|
||||||
notifier: this.notifier
|
notifier: this.notifier,
|
||||||
|
sProxy: prms.config.outGoing.sProxy
|
||||||
});
|
});
|
||||||
//Создаём обработчик очереди входящих
|
//Создаём обработчик очереди входящих
|
||||||
this.inQ = new iq.InQueue({
|
this.inQ = new iq.InQueue({
|
||||||
@ -231,7 +232,8 @@ class ParusAppServer {
|
|||||||
this.srvAvlCtrl = new sac.ServiceAvailableController({
|
this.srvAvlCtrl = new sac.ServiceAvailableController({
|
||||||
logger: this.logger,
|
logger: this.logger,
|
||||||
notifier: this.notifier,
|
notifier: this.notifier,
|
||||||
dbConn: this.dbConn
|
dbConn: this.dbConn,
|
||||||
|
sProxy: prms.config.outGoing.sProxy
|
||||||
});
|
});
|
||||||
//Скажем что инициализировали
|
//Скажем что инициализировали
|
||||||
await this.logger.info("Сервер приложений инициализирован");
|
await this.logger.info("Сервер приложений инициализирован");
|
||||||
|
@ -64,6 +64,8 @@ class OutQueue extends EventEmitter {
|
|||||||
this.logger = prms.logger;
|
this.logger = prms.logger;
|
||||||
//Запомним уведомитель
|
//Запомним уведомитель
|
||||||
this.notifier = prms.notifier;
|
this.notifier = prms.notifier;
|
||||||
|
//Запомним глобальный адрес прокси-сервера
|
||||||
|
this.sProxy = prms.sProxy;
|
||||||
//Список обрабатываемых в текущий момент сообщений очереди
|
//Список обрабатываемых в текущий момент сообщений очереди
|
||||||
this.inProgress = [];
|
this.inProgress = [];
|
||||||
//Привяжем методы к указателю на себя для использования в обработчиках событий
|
//Привяжем методы к указателю на себя для использования в обработчиках событий
|
||||||
@ -160,7 +162,8 @@ class OutQueue extends EventEmitter {
|
|||||||
service: _.find(this.services, { nId: prms.queue.nServiceId }),
|
service: _.find(this.services, { nId: prms.queue.nServiceId }),
|
||||||
function: _.find(_.find(this.services, { nId: prms.queue.nServiceId }).functions, {
|
function: _.find(_.find(this.services, { nId: prms.queue.nServiceId }).functions, {
|
||||||
nId: prms.queue.nServiceFnId
|
nId: prms.queue.nServiceFnId
|
||||||
})
|
}),
|
||||||
|
sProxy: this.sProxy
|
||||||
});
|
});
|
||||||
//Уменьшаем количество доступных обработчиков
|
//Уменьшаем количество доступных обработчиков
|
||||||
this.nWorkersLeft--;
|
this.nWorkersLeft--;
|
||||||
|
@ -145,9 +145,10 @@ const appProcess = async prms => {
|
|||||||
sQuery: prms.queue.blMsg === null ? "" : prms.queue.blMsg.toString()
|
sQuery: prms.queue.blMsg === null ? "" : prms.queue.blMsg.toString()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/* Установим прокси, если требуется */
|
// Если у сервиса указан прокси, либо у приложения установлен глобальный прокси
|
||||||
if (prms.service.sProxyURL) {
|
if (prms.service.sProxyURL || prms.sProxy) {
|
||||||
options.proxy = prms.service.sProxyURL;
|
// Добавляем прокси с приоритетом сервиса
|
||||||
|
options.proxy = prms.service.sProxyURL ?? prms.sProxy;
|
||||||
}
|
}
|
||||||
//Дополним получившиеся параметры переданными в сообщении
|
//Дополним получившиеся параметры переданными в сообщении
|
||||||
if (prms.queue.sOptions) {
|
if (prms.queue.sOptions) {
|
||||||
@ -513,7 +514,8 @@ const processTask = async prms => {
|
|||||||
let res = await appProcess({
|
let res = await appProcess({
|
||||||
queue: q,
|
queue: q,
|
||||||
service: prms.task.service,
|
service: prms.task.service,
|
||||||
function: prms.task.function
|
function: prms.task.function,
|
||||||
|
sProxy: prms.task.sProxy
|
||||||
});
|
});
|
||||||
//Если результат обработки ошибка - пробрасываем её дальше
|
//Если результат обработки ошибка - пробрасываем её дальше
|
||||||
if (res instanceof ServerError) {
|
if (res instanceof ServerError) {
|
||||||
|
@ -67,6 +67,8 @@ class ServiceAvailableController extends EventEmitter {
|
|||||||
this.logger = prms.logger;
|
this.logger = prms.logger;
|
||||||
//Запомним подключение к БД
|
//Запомним подключение к БД
|
||||||
this.dbConn = prms.dbConn;
|
this.dbConn = prms.dbConn;
|
||||||
|
//Запомним глобальный адрес прокси-сервера
|
||||||
|
this.sProxy = prms.sProxy;
|
||||||
//Привяжем методы к указателю на себя для использования в обработчиках событий
|
//Привяжем методы к указателю на себя для использования в обработчиках событий
|
||||||
this.serviceDetectingLoop = this.serviceDetectingLoop.bind(this);
|
this.serviceDetectingLoop = this.serviceDetectingLoop.bind(this);
|
||||||
} else {
|
} else {
|
||||||
@ -110,8 +112,18 @@ class ServiceAvailableController extends EventEmitter {
|
|||||||
service.nSrvType == objServiceSchema.NSRV_TYPE_SEND
|
service.nSrvType == objServiceSchema.NSRV_TYPE_SEND
|
||||||
) {
|
) {
|
||||||
try {
|
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.dAvailable = new Date();
|
||||||
service.dUnAvailable = null;
|
service.dUnAvailable = null;
|
||||||
|
@ -77,6 +77,16 @@ const common = new Schema({
|
|||||||
validateTerminateTimeout: path =>
|
validateTerminateTimeout: path =>
|
||||||
`Таймаут останова сервера (${path}) должен быть целым числом в диапазоне от 1000 до 120000`
|
`Таймаут останова сервера (${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 =>
|
validatePoolIncrementOutGoing: path =>
|
||||||
`Значение шага инкремента подключений к БД в пуле обработчика исходящих сообщений (${path}) должно быть целым числом в диапазоне от 0 до 10`
|
`Значение шага инкремента подключений к БД в пуле обработчика исходящих сообщений (${path}) должно быть целым числом в диапазоне от 0 до 10`
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Глобальный адрес прокси-сервера
|
||||||
|
sProxy: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path =>
|
||||||
|
`Адрес прокси-сервера приложения (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
|
required: path =>
|
||||||
|
`Не указан глобальный адрес прокси-сервера (${path})`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -65,6 +65,15 @@ exports.OutQueueProcessorTask = new Schema({
|
|||||||
message: {
|
message: {
|
||||||
required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
|
required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Глобальный адрес прокси-сервера
|
||||||
|
sProxy: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
|
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -66,6 +66,15 @@ exports.OutQueue = new Schema({
|
|||||||
`Объект для рассылки уведомлений (${path}) имеет некорректный тип данных (ожидалось - Notifier)`,
|
`Объект для рассылки уведомлений (${path}) имеет некорректный тип данных (ожидалось - Notifier)`,
|
||||||
required: path => `Не указан объект для рассылки уведомлений (${path})`
|
required: path => `Не указан объект для рассылки уведомлений (${path})`
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Глобальный адрес прокси-сервера
|
||||||
|
sProxy: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
|
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ exports.appProcess = new Schema({
|
|||||||
schema: Queue,
|
schema: Queue,
|
||||||
required: true,
|
required: true,
|
||||||
message: {
|
message: {
|
||||||
required: path => `Не указано обрабатываемое сообщение очреди (${path})`
|
required: path => `Не указано обрабатываемое сообщение очереди (${path})`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//Cервис-обработчик
|
//Cервис-обработчик
|
||||||
@ -55,6 +55,15 @@ exports.appProcess = new Schema({
|
|||||||
message: {
|
message: {
|
||||||
required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
|
required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Глобальный адрес прокси-сервера
|
||||||
|
sProxy: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
|
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -48,6 +48,16 @@ exports.ServiceAvailableController = new Schema({
|
|||||||
`Объект для взаимодействия с БД (${path}) имеет некорректный тип данных (ожидалось - DBConnector)`,
|
`Объект для взаимодействия с БД (${path}) имеет некорректный тип данных (ожидалось - DBConnector)`,
|
||||||
required: path => `Не указан объект для взаимодействия с БД (${path})`
|
required: path => `Не указан объект для взаимодействия с БД (${path})`
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Глобальный адрес прокси-сервера
|
||||||
|
sProxy: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path =>
|
||||||
|
`Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
|
required: path => `Не указан глобальный адрес прокси-сервера (${path})`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user