forked from CITKParus/P8-ExchangeService
ЦИТК-659 - Возможность работы нескольких серверов параллельно
This commit is contained in:
parent
5f88a45710
commit
30f7d59623
@ -10,7 +10,7 @@
|
|||||||
const _ = require("lodash"); //Работа с массивами и объектами
|
const _ = require("lodash"); //Работа с массивами и объектами
|
||||||
const EventEmitter = require("events"); //Обработчик пользовательских событий
|
const EventEmitter = require("events"); //Обработчик пользовательских событий
|
||||||
const { ServerError } = require("./server_errors"); //Типовая ошибка
|
const { ServerError } = require("./server_errors"); //Типовая ошибка
|
||||||
const { makeModuleFullPath, validateObject } = require("./utils"); //Вспомогательные функции
|
const { makeModuleFullPath, makeServerModuleName, validateObject } = require("./utils"); //Вспомогательные функции
|
||||||
const prmsDBConnectorSchema = require("../models/prms_db_connector"); //Схемы валидации параметров функций модуля
|
const prmsDBConnectorSchema = require("../models/prms_db_connector"); //Схемы валидации параметров функций модуля
|
||||||
const intfDBConnectorModuleSchema = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД
|
const intfDBConnectorModuleSchema = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД
|
||||||
const objServiceSchema = require("../models/obj_service"); //Схема валидации сервиса
|
const objServiceSchema = require("../models/obj_service"); //Схема валидации сервиса
|
||||||
@ -110,9 +110,7 @@ class DBConnector extends EventEmitter {
|
|||||||
sRelease: this.connectSettings.sRelease,
|
sRelease: this.connectSettings.sRelease,
|
||||||
nWorkers: this.connectSettings.nMaxWorkers,
|
nWorkers: this.connectSettings.nMaxWorkers,
|
||||||
sServerName: this.connectSettings.exsSrv.sServerName,
|
sServerName: this.connectSettings.exsSrv.sServerName,
|
||||||
sModuleName: this.connectSettings.exsSrv.sServerName
|
sModuleName: makeServerModuleName(this.connectSettings.sSessionAppName, this.connectSettings.exsSrv.sServerName),
|
||||||
? `${this.connectSettings.sSessionAppName}$${this.connectSettings.exsSrv.sServerName}`
|
|
||||||
: this.connectSettings.sSessionAppName,
|
|
||||||
connection: this.connection
|
connection: this.connection
|
||||||
});
|
});
|
||||||
//Если сервис интеграции разделяется на сервера
|
//Если сервис интеграции разделяется на сервера
|
||||||
|
@ -77,6 +77,11 @@ const makeModuleFullPath = sModuleName => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Формирование наименование модуля сессии
|
||||||
|
const makeServerModuleName = (sSessionAppName, sServerName) => {
|
||||||
|
return sServerName ? `${sSessionAppName}$${sServerName}` : sSessionAppName;
|
||||||
|
};
|
||||||
|
|
||||||
//Формирование текста ошибки
|
//Формирование текста ошибки
|
||||||
const makeErrorText = e => {
|
const makeErrorText = e => {
|
||||||
//Сообщение об ошибке по умолчанию
|
//Сообщение об ошибке по умолчанию
|
||||||
@ -425,6 +430,7 @@ const wrapPromiseTimeout = (timeout, promise) => {
|
|||||||
|
|
||||||
exports.validateObject = validateObject;
|
exports.validateObject = validateObject;
|
||||||
exports.makeModuleFullPath = makeModuleFullPath;
|
exports.makeModuleFullPath = makeModuleFullPath;
|
||||||
|
exports.makeServerModuleName = makeServerModuleName;
|
||||||
exports.makeErrorText = makeErrorText;
|
exports.makeErrorText = makeErrorText;
|
||||||
exports.getAppSrvModuleName = getAppSrvModuleName;
|
exports.getAppSrvModuleName = getAppSrvModuleName;
|
||||||
exports.getAppSrvFunctionName = getAppSrvFunctionName;
|
exports.getAppSrvFunctionName = getAppSrvFunctionName;
|
||||||
|
@ -49,9 +49,6 @@ const validatePoolMaxInComing = val => val >= 1 && val <= 1000;
|
|||||||
//Функция проверки значения шага инкремента подключений к БД в пуле обработчика входящих сообщений
|
//Функция проверки значения шага инкремента подключений к БД в пуле обработчика входящих сообщений
|
||||||
const validatePoolIncrementInComing = val => val >= 0 && val <= 1000;
|
const validatePoolIncrementInComing = val => val >= 0 && val <= 1000;
|
||||||
|
|
||||||
//Функция проверки наименования сервера приложений в сессии БД
|
|
||||||
const validateSessionAppName = val => val === "PARUS$ExchangeServer";
|
|
||||||
|
|
||||||
//Схема валидации общих параметров сервера приложений
|
//Схема валидации общих параметров сервера приложений
|
||||||
const common = new Schema({
|
const common = new Schema({
|
||||||
//Наименование сервера приложений
|
//Наименование сервера приложений
|
||||||
@ -146,12 +143,9 @@ const dbConnect = new Schema({
|
|||||||
sSessionAppName: {
|
sSessionAppName: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
use: { validateSessionAppName },
|
|
||||||
message: {
|
message: {
|
||||||
type: path => `Наименование сервера приложений в сессии БД (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
type: path => `Наименование сервера приложений в сессии БД (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
required: path => `Не указано наименование сервера приложений в сессии БД (${path})`,
|
required: path => `Не указано наименование сервера приложений в сессии БД (${path})`
|
||||||
validateSessionAppName: path =>
|
|
||||||
`Наименование сервера приложений в сессии БД поддерживает только значение "PARUS$ExchangeServer" (${path})`
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//Наименование подключаемого модуля обслуживания БД
|
//Наименование подключаемого модуля обслуживания БД
|
||||||
|
@ -185,8 +185,6 @@ const clearServer = async prms => {
|
|||||||
//Подключение к БД
|
//Подключение к БД
|
||||||
const connect = async prms => {
|
const connect = async prms => {
|
||||||
try {
|
try {
|
||||||
//Определяем наименование модуля сессии
|
|
||||||
let moduleName = prms.exsSrv.sServerName ? `${prms.sSessionAppName}$${prms.exsSrv.sServerName}` : prms.sSessionAppName;
|
|
||||||
//Создаем пул подключения
|
//Создаем пул подключения
|
||||||
let pool = await oracledb.createPool({
|
let pool = await oracledb.createPool({
|
||||||
user: prms.sUser,
|
user: prms.sUser,
|
||||||
@ -197,15 +195,19 @@ const connect = async prms => {
|
|||||||
poolMax: prms.nPoolMax ? prms.nPoolMax : 4,
|
poolMax: prms.nPoolMax ? prms.nPoolMax : 4,
|
||||||
poolIncrement: prms.nPoolIncrement ? prms.nPoolIncrement : 0,
|
poolIncrement: prms.nPoolIncrement ? prms.nPoolIncrement : 0,
|
||||||
sessionCallback: (connection, requestedTag, callback) => {
|
sessionCallback: (connection, requestedTag, callback) => {
|
||||||
connection.module = moduleName;
|
//Устанавливаем схему
|
||||||
connection.execute(`ALTER SESSION SET CURRENT_SCHEMA=${prms.sSchema}`).then(
|
connection
|
||||||
r => {
|
.execute(`ALTER SESSION SET CURRENT_SCHEMA=${prms.sSchema}`)
|
||||||
|
.then(r => {
|
||||||
|
//Устанавливаем модуль сессии
|
||||||
|
connection.execute(`begin PKG_EXS.UTL_MODULE_SET(SEXSSRV => '${prms.exsSrv.sServerName}'); end;`);
|
||||||
|
})
|
||||||
|
.then(r => {
|
||||||
callback(null, connection);
|
callback(null, connection);
|
||||||
},
|
})
|
||||||
e => {
|
.catch(e => {
|
||||||
callback(e, null);
|
callback(e, null);
|
||||||
}
|
});
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return pool;
|
return pool;
|
||||||
|
@ -139,7 +139,7 @@ const checkAppStart = async prms => {
|
|||||||
NCONTROL_VERSION: prms.bControlSystemVersion ? 1 : 0,
|
NCONTROL_VERSION: prms.bControlSystemVersion ? 1 : 0,
|
||||||
SEXS_RELEASE_DATE: prms.sRelease,
|
SEXS_RELEASE_DATE: prms.sRelease,
|
||||||
NWORKERS: prms.nWorkers,
|
NWORKERS: prms.nWorkers,
|
||||||
SEXSSRV: prms.sServerName,
|
SEXSSRV: prms.sServerName !== "" ? prms.sServerName : null,
|
||||||
SMODULE_NAME: prms.sModuleName
|
SMODULE_NAME: prms.sModuleName
|
||||||
},
|
},
|
||||||
outPrms: {
|
outPrms: {
|
||||||
@ -196,7 +196,10 @@ const connect = async prms => {
|
|||||||
max: prms.nPoolMax ? prms.nPoolMax : 4
|
max: prms.nPoolMax ? prms.nPoolMax : 4
|
||||||
});
|
});
|
||||||
pool.on("acquire", async client => {
|
pool.on("acquire", async client => {
|
||||||
|
//Устанавливаем схему
|
||||||
await client.query(`select ALTER_SESSION_SET_SCHEMA($1);`, [prms.sSchema]);
|
await client.query(`select ALTER_SESSION_SET_SCHEMA($1);`, [prms.sSchema]);
|
||||||
|
//Устанавливаем модуль сессии
|
||||||
|
await client.query(`select PKG_EXS$UTL_MODULE_SET($1);`, [prms.exsSrv.sServerName]);
|
||||||
});
|
});
|
||||||
return pool;
|
return pool;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user