forked from CITKParus/P8-ExchangeService
Вынос сервера приложений в отдельный модуль
This commit is contained in:
parent
3f665e7ed4
commit
be3dd2553e
@ -26,7 +26,7 @@ let outgoing = {
|
|||||||
//Размер блока одновременно обрабатываемых исходящих сообщений
|
//Размер блока одновременно обрабатываемых исходящих сообщений
|
||||||
nPortionSize: 1,
|
nPortionSize: 1,
|
||||||
//Скорость проверки наличия исходящих сообщений (мс)
|
//Скорость проверки наличия исходящих сообщений (мс)
|
||||||
nCheckTimeout: 500
|
nCheckTimeout: 5000
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------
|
//-----------------
|
||||||
|
81
core/app.js
Normal file
81
core/app.js
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
Сервис интеграции ПП Парус 8 с WEB API
|
||||||
|
Модуль ядра: сервер приложений
|
||||||
|
*/
|
||||||
|
|
||||||
|
//----------------------
|
||||||
|
// Подключение библиотек
|
||||||
|
//----------------------
|
||||||
|
|
||||||
|
const lg = require("../core/logger.js"); //Протоколирование работы
|
||||||
|
const db = require("../core/db_connector.js"); //Взаимодействие с БД
|
||||||
|
const oq = require("../core/out_queue.js"); //Прослушивание очереди исходящих сообщений
|
||||||
|
|
||||||
|
//------------
|
||||||
|
// Тело модуля
|
||||||
|
//------------
|
||||||
|
|
||||||
|
//Класс сервера приложений
|
||||||
|
class ParusAppServer {
|
||||||
|
//конструктор класса
|
||||||
|
constructor(prms) {
|
||||||
|
//Создаём подключение к БД
|
||||||
|
this.dbConn = new db.DBConnector(prms.dbConnect);
|
||||||
|
//Создаём логгер для протоколирования работы
|
||||||
|
this.logger = new lg.Logger();
|
||||||
|
//Создаём обработчик очереди исходящих
|
||||||
|
this.outQ = new oq.OutQueue(prms.outgoing, this.dbConn, this.logger);
|
||||||
|
//Привяжем методы к указателю на себя для использования в обработчиках событий
|
||||||
|
this.onDBConnected = this.onDBConnected.bind(this);
|
||||||
|
this.onDBDisconnected = this.onDBDisconnected.bind(this);
|
||||||
|
}
|
||||||
|
//При подключении к БД
|
||||||
|
async onDBConnected(connection) {
|
||||||
|
this.logger.setDBConnector(this.dbConn);
|
||||||
|
await this.logger.info("Сервер приложений подключен к БД");
|
||||||
|
}
|
||||||
|
//При отключении от БД
|
||||||
|
async onDBDisconnected() {
|
||||||
|
this.logger.removeDBConnector();
|
||||||
|
await this.logger.warn("Сервер приложений отключен от БД");
|
||||||
|
}
|
||||||
|
//Запуск сервера
|
||||||
|
async run() {
|
||||||
|
await this.logger.info("Запуск сервера приложений...");
|
||||||
|
this.dbConn.on(db.SEVT_DB_CONNECTOR_CONNECTED, this.onDBConnected);
|
||||||
|
this.dbConn.on(db.SEVT_DB_CONNECTOR_DISCONNECTED, this.onDBDisconnected);
|
||||||
|
await this.logger.info("Подключение сервера приложений к БД...");
|
||||||
|
try {
|
||||||
|
await this.dbConn.connect();
|
||||||
|
} catch (e) {
|
||||||
|
await this.logger.error("Ошибка подключения к БД: " + e.sCODE + ": " + e.sMessage);
|
||||||
|
stop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.outQ.startProcessing();
|
||||||
|
await this.logger.info("Сервер приложений запущен");
|
||||||
|
}
|
||||||
|
//Останов сервера
|
||||||
|
async stop() {
|
||||||
|
await this.logger.warn("Останов сервера приложений...");
|
||||||
|
await this.outQ.stopProcessing();
|
||||||
|
if (this.dbConn.bConnected) {
|
||||||
|
await this.logger.warn("Отключение сервера приложений от БД...");
|
||||||
|
try {
|
||||||
|
await this.dbConn.disconnect();
|
||||||
|
process.exit(0);
|
||||||
|
} catch (e) {
|
||||||
|
await this.logger.error("Ошибка отключения от БД: " + e.sCODE + ": " + e.sMessage);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------
|
||||||
|
// Интерфейс модуля
|
||||||
|
//------------------
|
||||||
|
|
||||||
|
exports.ParusAppServer = ParusAppServer;
|
70
index.js
70
index.js
@ -7,81 +7,30 @@
|
|||||||
// Подключение библиотек
|
// Подключение библиотек
|
||||||
//----------------------
|
//----------------------
|
||||||
|
|
||||||
require("module-alias/register");
|
require("module-alias/register"); //Поддержка псевонимов при подключении модулей
|
||||||
const cfg = require("./config.js");
|
const cfg = require("./config.js"); //Настройки сервера приложений
|
||||||
const lg = require("./core/logger.js");
|
const app = require("./core/app.js"); //Сервер приложений
|
||||||
const db = require("./core/db_connector.js");
|
|
||||||
const oq = require("./core/out_queue.js");
|
|
||||||
|
|
||||||
//--------------------------
|
//--------------------------
|
||||||
// Глобальные идентификаторы
|
// Глобальные идентификаторы
|
||||||
//--------------------------
|
//--------------------------
|
||||||
|
|
||||||
let dbConn = new db.DBConnector(cfg.dbConnect); //Взаимодействие с БД
|
let appSrv = new app.ParusAppServer(cfg); //Экземпляр сервера приложений
|
||||||
let logger = new lg.Logger(); //Протоколирование работы
|
|
||||||
let outQ = new oq.OutQueue(cfg.outgoing, dbConn, logger); //Отслеживание очереди исходящих
|
|
||||||
|
|
||||||
//----------------------------------------
|
//----------------------------------------
|
||||||
// Управление процессом сервера приложений
|
// Управление процессом сервера приложений
|
||||||
//----------------------------------------
|
//----------------------------------------
|
||||||
|
|
||||||
//При подключении к БД
|
|
||||||
const onDBConnected = async connection => {
|
|
||||||
logger.setDBConnector(dbConn);
|
|
||||||
await logger.info("Сервер приложений подключен к БД");
|
|
||||||
};
|
|
||||||
|
|
||||||
//При отключении от БД
|
|
||||||
const onDBDisconnected = async () => {
|
|
||||||
logger.removeDBConnector();
|
|
||||||
await logger.info("Сервер приложений отключен от БД");
|
|
||||||
};
|
|
||||||
|
|
||||||
//Запуск сервера
|
|
||||||
const run = async () => {
|
|
||||||
await logger.info("Запуск сервера приложений...");
|
|
||||||
dbConn.on(db.SEVT_DB_CONNECTOR_CONNECTED, onDBConnected);
|
|
||||||
dbConn.on(db.SEVT_DB_CONNECTOR_DISCONNECTED, onDBDisconnected);
|
|
||||||
await logger.info("Подключение сервера приложений к БД...");
|
|
||||||
try {
|
|
||||||
await dbConn.connect();
|
|
||||||
} catch (e) {
|
|
||||||
await logger.error("Ошибка подключения к БД: " + e.sCODE + ": " + e.sMessage);
|
|
||||||
stop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await outQ.startProcessing();
|
|
||||||
await logger.info("Сервер приложений запущен");
|
|
||||||
};
|
|
||||||
|
|
||||||
//Останов сервера
|
|
||||||
const stop = async () => {
|
|
||||||
await logger.warn("Останов сервера приложений...");
|
|
||||||
outQ.stopProcessing();
|
|
||||||
if (dbConn.bConnected) {
|
|
||||||
await logger.warn("Отключение сервера приложений от БД...");
|
|
||||||
try {
|
|
||||||
await dbConn.disconnect();
|
|
||||||
process.exit(0);
|
|
||||||
} catch (e) {
|
|
||||||
await logger.error("Ошибка отключения от БД: " + e.sCODE + ": " + e.sMessage);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//Обработка события "выход" жизненного цикла процесса
|
//Обработка события "выход" жизненного цикла процесса
|
||||||
process.on("exit", code => {
|
process.on("exit", code => {
|
||||||
//Сообщим о завершении процесса
|
//Сообщим о завершении процесса
|
||||||
logger.warn("Сервер приложений остановлен (код: " + code + ") ");
|
appSrv.logger.warn("Сервер приложений остановлен (код: " + code + ") ");
|
||||||
});
|
});
|
||||||
|
|
||||||
//Перехват CTRL + C (останова процесса)
|
//Перехват CTRL + C (останова процесса)
|
||||||
process.on("SIGINT", () => {
|
process.on("SIGINT", () => {
|
||||||
//Инициируем выход из процесса
|
//Инициируем выход из процесса
|
||||||
stop();
|
appSrv.stop();
|
||||||
});
|
});
|
||||||
|
|
||||||
//------------
|
//------------
|
||||||
@ -89,4 +38,9 @@ process.on("SIGINT", () => {
|
|||||||
//------------
|
//------------
|
||||||
|
|
||||||
//Старутем
|
//Старутем
|
||||||
run();
|
appSrv
|
||||||
|
.run()
|
||||||
|
.then(r => {})
|
||||||
|
.catch(e => {
|
||||||
|
appSrv.logger.error("НЕОЖИДАННАЯ ОШИБКА: " + e);
|
||||||
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user