Обработчик исходящего сообщения (начало)
This commit is contained in:
parent
2e10fadccf
commit
12b5e524c1
96
core/out_queue_processor.js
Normal file
96
core/out_queue_processor.js
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
Сервис интеграции ПП Парус 8 с WEB API
|
||||
Модуль ядра: обработчик исходящего сообщения
|
||||
*/
|
||||
|
||||
//----------------------
|
||||
// Подключение библиотек
|
||||
//----------------------
|
||||
|
||||
const _ = require("lodash"); //Работа с массивами и коллекциями
|
||||
const { makeModuleFullPath, validateObject } = require("./utils"); //Вспомогательные функции
|
||||
const { ServerError } = require("./server_errors"); //Типовая ошибка
|
||||
const { NQUEUE_EXEC_STATE_APP_OK, NQUEUE_EXEC_STATE_APP_ERR } = require("../models/obj_queue"); //Схема валидации сообщения очереди обмена
|
||||
const objOutQueueProcessorSchema = require("../models/obj_out_queue_processor"); //Схема валидации сообщений обмена с бработчиком очереди исходящих сообщений
|
||||
const {
|
||||
SERR_MODULES_BAD_INTERFACE,
|
||||
SERR_OBJECT_BAD_INTERFACE,
|
||||
SERR_MODULES_NO_MODULE_SPECIFIED
|
||||
} = require("./constants"); //Глобальные константы
|
||||
|
||||
//--------------------------
|
||||
// Глобальные идентификаторы
|
||||
//--------------------------
|
||||
|
||||
//Сообщени для родительского процесса
|
||||
let result = {
|
||||
nExecState: null,
|
||||
sExecMsg: null,
|
||||
blResp: null
|
||||
};
|
||||
|
||||
//------------
|
||||
// Тело модуля
|
||||
//------------
|
||||
|
||||
//Установка состояния ошибки в ответном сообщении
|
||||
const setErrorResult = e => {
|
||||
//Выставим код состояния - ошибка обработки сервером приложений
|
||||
result.nExecState = NQUEUE_EXEC_STATE_APP_ERR;
|
||||
//Выставим сообщение об ошибке
|
||||
result.sExecMsg = e.message;
|
||||
};
|
||||
|
||||
//Установка состояния успеха в ответном сообщении
|
||||
const setOKResult = () => {
|
||||
//Выставим код состояния - ошибка обработки сервером приложений
|
||||
result.nExecState = NQUEUE_EXEC_STATE_APP_OK;
|
||||
//Выставим сообщение об ошибке
|
||||
result.sExecMsg = null;
|
||||
};
|
||||
|
||||
//Обработка задачи
|
||||
const processTask = async task => {
|
||||
setTimeout(() => {
|
||||
setOKResult();
|
||||
process.send(result);
|
||||
}, 3000);
|
||||
};
|
||||
|
||||
//---------------------------------
|
||||
// Управление процессом обработчика
|
||||
//---------------------------------
|
||||
|
||||
//Перехват CTRL + C (останов процесса)
|
||||
process.on("SIGINT", async () => {});
|
||||
|
||||
//Перехват CTRL + \ (останов процесса)
|
||||
process.on("SIGQUIT", () => {});
|
||||
|
||||
//Перехват мягкого останова процесса
|
||||
process.on("SIGTERM", () => {});
|
||||
|
||||
//Перехват ошибок
|
||||
process.on("uncaughtException", e => {
|
||||
//Выставляем ошибку в сообщении
|
||||
setErrorResult(e);
|
||||
//Отправляем ответ родительскому процессу
|
||||
process.send(result);
|
||||
});
|
||||
|
||||
//Приём сообщений
|
||||
process.on("message", task => {
|
||||
//Проверяем структуру переданного сообщения
|
||||
let sCheckResult = validateObject(
|
||||
task,
|
||||
objOutQueueProcessorSchema.OutQueueProcessorTask,
|
||||
"Задача обработчика очереди исходящих сообщений"
|
||||
);
|
||||
//Если структура объекта в норме
|
||||
if (!sCheckResult) {
|
||||
//Запускаем обработку
|
||||
processTask(task);
|
||||
} else {
|
||||
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||
}
|
||||
});
|
72
models/obj_out_queue_processor.js
Normal file
72
models/obj_out_queue_processor.js
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
Сервис интеграции ПП Парус 8 с WEB API
|
||||
Модели данных: описатель сообщений обмена с обработчиком очереди исходящих сообщений
|
||||
*/
|
||||
|
||||
//----------------------
|
||||
// Подключение библиотек
|
||||
//----------------------
|
||||
|
||||
const Schema = require("validate"); //Схемы валидации
|
||||
const { Queue } = require("./obj_queue"); //Схема валидации сообщения очереди обмена
|
||||
const { Service } = require("./obj_service"); //Схема валидации сервиса
|
||||
const { NQUEUE_EXEC_STATE_APP_OK, NQUEUE_EXEC_STATE_APP_ERR } = require("./obj_queue"); //Схема валидации сообщения очереди обмена
|
||||
|
||||
//------------------
|
||||
// Интерфейс модуля
|
||||
//------------------
|
||||
|
||||
//Схема валидации задачи обработчику очереди исходящих сообщений
|
||||
exports.OutQueueProcessorTask = new Schema({
|
||||
//Запись журнала обмена для обработки
|
||||
queue: {
|
||||
//schema: Queue,
|
||||
required: false,
|
||||
message: {
|
||||
required: "Не указано обрабатываемое сообщение очереди (queue)"
|
||||
}
|
||||
},
|
||||
//Cервис
|
||||
service: {
|
||||
//schema: Service,
|
||||
required: false,
|
||||
message: {
|
||||
required: "Не указан сервис для обработки сообщения очереди (service)"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//Схема валидации ответа обработчика очереди исходящих сообщений
|
||||
exports.OutQueueProcessorTaskResult = new Schema({
|
||||
//Состояние обработки сообщения очереди обмена
|
||||
nExecState: {
|
||||
type: Number,
|
||||
enum: [NQUEUE_EXEC_STATE_APP_OK, NQUEUE_EXEC_STATE_APP_ERR],
|
||||
required: true,
|
||||
message: {
|
||||
type:
|
||||
"Состояние обработки сообщения очереди обмена (nExecState) имеет некорректный тип данных (ожидалось - Number)",
|
||||
enum: "Значение состояния обработки сообщения очереди обмена (nExecState) не поддерживается",
|
||||
required: "Не указано состояние обработки сообщения очереди обмена (nExecState)"
|
||||
}
|
||||
},
|
||||
//Информация от обработчика сообщения очереди обмена
|
||||
sExecMsg: {
|
||||
type: String,
|
||||
required: false,
|
||||
message: {
|
||||
type:
|
||||
"Информация от обработчика сообщения очереди обмена (sExecMsg) имеет некорректный тип данных (ожидалось - String)",
|
||||
required: "Не указана информация от обработчика сообщения очереди обмена (sExecMsg)"
|
||||
}
|
||||
},
|
||||
//Данные ответа
|
||||
blResp: {
|
||||
type: Buffer,
|
||||
required: false,
|
||||
message: {
|
||||
type: "Данные ответа сообщения очереди обмена (blResp) имеют некорректный тип данных (ожидалось - Buffer)",
|
||||
required: "Не указаны данные ответа сообщения очереди обмена (blResp)"
|
||||
}
|
||||
}
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user