ЦИТК-659 - Возможность работы нескольких серверов параллельно

This commit is contained in:
Dollerino 2025-06-03 13:24:07 +03:00
parent 5f88a45710
commit 30f7d59623
5 changed files with 24 additions and 21 deletions

View File

@ -10,7 +10,7 @@
const _ = require("lodash"); //Работа с массивами и объектами
const EventEmitter = require("events"); //Обработчик пользовательских событий
const { ServerError } = require("./server_errors"); //Типовая ошибка
const { makeModuleFullPath, validateObject } = require("./utils"); //Вспомогательные функции
const { makeModuleFullPath, makeServerModuleName, validateObject } = require("./utils"); //Вспомогательные функции
const prmsDBConnectorSchema = require("../models/prms_db_connector"); //Схемы валидации параметров функций модуля
const intfDBConnectorModuleSchema = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД
const objServiceSchema = require("../models/obj_service"); //Схема валидации сервиса
@ -110,9 +110,7 @@ class DBConnector extends EventEmitter {
sRelease: this.connectSettings.sRelease,
nWorkers: this.connectSettings.nMaxWorkers,
sServerName: this.connectSettings.exsSrv.sServerName,
sModuleName: this.connectSettings.exsSrv.sServerName
? `${this.connectSettings.sSessionAppName}$${this.connectSettings.exsSrv.sServerName}`
: this.connectSettings.sSessionAppName,
sModuleName: makeServerModuleName(this.connectSettings.sSessionAppName, this.connectSettings.exsSrv.sServerName),
connection: this.connection
});
//Если сервис интеграции разделяется на сервера

View File

@ -77,6 +77,11 @@ const makeModuleFullPath = sModuleName => {
}
};
//Формирование наименование модуля сессии
const makeServerModuleName = (sSessionAppName, sServerName) => {
return sServerName ? `${sSessionAppName}$${sServerName}` : sSessionAppName;
};
//Формирование текста ошибки
const makeErrorText = e => {
//Сообщение об ошибке по умолчанию
@ -425,6 +430,7 @@ const wrapPromiseTimeout = (timeout, promise) => {
exports.validateObject = validateObject;
exports.makeModuleFullPath = makeModuleFullPath;
exports.makeServerModuleName = makeServerModuleName;
exports.makeErrorText = makeErrorText;
exports.getAppSrvModuleName = getAppSrvModuleName;
exports.getAppSrvFunctionName = getAppSrvFunctionName;

View File

@ -49,9 +49,6 @@ const validatePoolMaxInComing = val => val >= 1 && val <= 1000;
//Функция проверки значения шага инкремента подключений к БД в пуле обработчика входящих сообщений
const validatePoolIncrementInComing = val => val >= 0 && val <= 1000;
//Функция проверки наименования сервера приложений в сессии БД
const validateSessionAppName = val => val === "PARUS$ExchangeServer";
//Схема валидации общих параметров сервера приложений
const common = new Schema({
//Наименование сервера приложений
@ -146,12 +143,9 @@ const dbConnect = new Schema({
sSessionAppName: {
type: String,
required: true,
use: { validateSessionAppName },
message: {
type: path => `Наименование сервера приложений в сессии БД (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указано наименование сервера приложений в сессии БД (${path})`,
validateSessionAppName: path =>
`Наименование сервера приложений в сессии БД поддерживает только значение "PARUS$ExchangeServer" (${path})`
required: path => `Не указано наименование сервера приложений в сессии БД (${path})`
}
},
//Наименование подключаемого модуля обслуживания БД

View File

@ -185,8 +185,6 @@ const clearServer = async prms => {
//Подключение к БД
const connect = async prms => {
try {
//Определяем наименование модуля сессии
let moduleName = prms.exsSrv.sServerName ? `${prms.sSessionAppName}$${prms.exsSrv.sServerName}` : prms.sSessionAppName;
//Создаем пул подключения
let pool = await oracledb.createPool({
user: prms.sUser,
@ -197,15 +195,19 @@ const connect = async prms => {
poolMax: prms.nPoolMax ? prms.nPoolMax : 4,
poolIncrement: prms.nPoolIncrement ? prms.nPoolIncrement : 0,
sessionCallback: (connection, requestedTag, callback) => {
connection.module = moduleName;
connection.execute(`ALTER SESSION SET CURRENT_SCHEMA=${prms.sSchema}`).then(
r => {
//Устанавливаем схему
connection
.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);
},
e => {
})
.catch(e => {
callback(e, null);
}
);
});
}
});
return pool;

View File

@ -139,7 +139,7 @@ const checkAppStart = async prms => {
NCONTROL_VERSION: prms.bControlSystemVersion ? 1 : 0,
SEXS_RELEASE_DATE: prms.sRelease,
NWORKERS: prms.nWorkers,
SEXSSRV: prms.sServerName,
SEXSSRV: prms.sServerName !== "" ? prms.sServerName : null,
SMODULE_NAME: prms.sModuleName
},
outPrms: {
@ -196,7 +196,10 @@ const connect = async prms => {
max: prms.nPoolMax ? prms.nPoolMax : 4
});
pool.on("acquire", async client => {
//Устанавливаем схему
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;
} catch (e) {