Вынос сервера приложений в отдельный модуль

This commit is contained in:
Mikhail Chechnev 2018-11-20 17:25:22 +03:00
parent 3f665e7ed4
commit be3dd2553e
3 changed files with 94 additions and 59 deletions

View File

@ -26,7 +26,7 @@ let outgoing = {
//Размер блока одновременно обрабатываемых исходящих сообщений
nPortionSize: 1,
//Скорость проверки наличия исходящих сообщений (мс)
nCheckTimeout: 500
nCheckTimeout: 5000
};
//-----------------

81
core/app.js Normal file
View 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;

View File

@ -7,81 +7,30 @@
// Подключение библиотек
//----------------------
require("module-alias/register");
const cfg = require("./config.js");
const lg = require("./core/logger.js");
const db = require("./core/db_connector.js");
const oq = require("./core/out_queue.js");
require("module-alias/register"); //Поддержка псевонимов при подключении модулей
const cfg = require("./config.js"); //Настройки сервера приложений
const app = require("./core/app.js"); //Сервер приложений
//--------------------------
// Глобальные идентификаторы
//--------------------------
let dbConn = new db.DBConnector(cfg.dbConnect); //Взаимодействие с БД
let logger = new lg.Logger(); //Протоколирование работы
let outQ = new oq.OutQueue(cfg.outgoing, dbConn, logger); //Отслеживание очереди исходящих
let appSrv = new app.ParusAppServer(cfg); //Экземпляр сервера приложений
//----------------------------------------
// Управление процессом сервера приложений
//----------------------------------------
//При подключении к БД
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 => {
//Сообщим о завершении процесса
logger.warn("Сервер приложений остановлен (код: " + code + ") ");
appSrv.logger.warn("Сервер приложений остановлен (код: " + code + ") ");
});
//Перехват CTRL + C (останова процесса)
process.on("SIGINT", () => {
//Инициируем выход из процесса
stop();
appSrv.stop();
});
//------------
@ -89,4 +38,9 @@ process.on("SIGINT", () => {
//------------
//Старутем
run();
appSrv
.run()
.then(r => {})
.catch(e => {
appSrv.logger.error("НЕОЖИДАННАЯ ОШИБКА: " + e);
});