From 0d1f5bac9c6b87e5cea88ea2caef73d5341e1b0d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 28 Nov 2022 13:56:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-41=20-=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8C=20=D0=BA=D0=BE=D0=BB=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B0=20=D0=BA=D0=BB=D0=B8=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D1=81=D0=BA=D0=B8=D1=85=20=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D0=B5=D0=BD=D0=B7=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/app.js | 3 ++- modules/parus_oracle_db.js | 39 ++++++++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/core/app.js b/core/app.js index 7d4c4ae..9b6311b 100644 --- a/core/app.js +++ b/core/app.js @@ -204,7 +204,8 @@ class ParusAppServer { ...prms.config.dbConnect, nPoolMin: prms.config.inComing.nPoolMin, nPoolMax: prms.config.inComing.nPoolMax, - nPoolIncrement: prms.config.inComing.nPoolIncrement + nPoolIncrement: prms.config.inComing.nPoolIncrement, + nMaxWorkers: prms.config.outGoing.nMaxWorkers } }); //Создаём модуль рассылки уведомлений diff --git a/modules/parus_oracle_db.js b/modules/parus_oracle_db.js index 03900cb..ae3f20b 100644 --- a/modules/parus_oracle_db.js +++ b/modules/parus_oracle_db.js @@ -38,6 +38,36 @@ const readCursorData = cursor => { }); }; +//Проверка допустимого количества воркеров +const checkWorkers = async prms => { + let pooledConnection; + try { + pooledConnection = await prms.connection.getConnection(); + let res = await pooledConnection.execute("BEGIN :LIC_CNT := PKG_EXS.UTL_LIC_CLNT_COUNT_GET(); END;", { + LIC_CNT: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER } + }); + let nMaxLic = res.outBinds.LIC_CNT; + if (nMaxLic === 0) { + throw new Error(`Не определено количество лицензий для приложения "ExchangeServer".`); + } + if (prms.nMaxWorkers > nMaxLic - 1) { + throw new Error( + `Недопустимое значение параметра "Количество одновременно обрабатываемых исходящих сообщений" ("outGoing.nMaxWorkers") файла конфигурации сервиса приложений ("config.js"). Максимальное количество одновременно обрабатываемых исходящих сообщений - ${nMaxLic}.` + ); + } + } catch (e) { + throw new Error(e.message); + } finally { + if (pooledConnection) { + try { + await pooledConnection.close(); + } catch (e) { + throw new Error(e.message); + } + } + } +}; + //Подключение к БД const connect = async prms => { try { @@ -61,6 +91,7 @@ const connect = async prms => { ); } }); + await checkWorkers({ nMaxWorkers: prms.nMaxWorkers, connection: pool }); return pool; } catch (e) { throw new Error(e.message); @@ -203,10 +234,10 @@ const isServiceAuth = async prms => { let pooledConnection; try { pooledConnection = await prms.connection.getConnection(); - let res = await pooledConnection.execute( - "BEGIN :RET := PKG_EXS.SERVICE_IS_AUTH(NEXSSERVICE => :NEXSSERVICE); END;", - { NEXSSERVICE: prms.nServiceId, RET: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER } } - ); + let res = await pooledConnection.execute("BEGIN :RET := PKG_EXS.SERVICE_IS_AUTH(NEXSSERVICE => :NEXSSERVICE); END;", { + NEXSSERVICE: prms.nServiceId, + RET: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER } + }); return res.outBinds.RET; } catch (e) { throw new Error(e.message);