Структура ядра
Конфигурация
Хост
Корневой модуль запускаемый в процессе, который хранит остальные сущности и и управляет запуском системы. Разделение системы на хосты Готовые модули
import {ServiceHost} from '@morphcluster/core'
host = new ServiceHost()
host.addService(new HelloWorld(host))
Транспорт
Транспорт - абстракция для определения способа взаимодействия между хостами
Контекст
Контекст определяет и идентифицирует действия в системе, и позволяет отслеживать ход их выполнения, в процессе которого может вызыватся действия в разных частях системы, в т.ч. в другом хосте.
- Монитор выполнения - позволяет понять в каком сейчас состоянии находится данный контекст, также можно понять где он сейчас находится
- Журнал выполнения - позволяет отслеживать действия которые были завершены, и просматривать отладочные данные
- Прерывание. По данным идентификации контекста можно послать сигнал прерывания, который сообщит внутрь действия том, что действие надо прервать, вызвав исключение.
- Информация о вызове. Внутри контекста хранится информация о том, кто создал этот контекст
- Данные о пользователе, если это внешний вызов. Это позволяет ограничивать доступ к системе и данным.
Схема сервиса
Схема сервиса - это структурированные данные, описывающая сервис для взаимодействия между ними и визуализации сервисов. Она описывает все способы взаимодействия с сервисом для внутреннего контура.
Схема используется для передачи между хостами, возможностей сервисов.
Схема описывается через json такого вида:
{
name:"MyService",
requests: [
{
name:"run",
http: 'POST',
request:{
"type": "object",
"properties": {
"name": { "type": "string" },
"params": {},
},
"required": [ "name" ]
},
response:{},
description:"Выполнить метод",
}
]
}
Схему целиком можно установить через метод setSvcSchema(serviceSchema). Через метод getSvcSchema() можно получить текущую схему, вместе с добавленными изменениями отдельно.
Исключения
В отличии от стандартных исключений, исключения в фреймворке лучше вызывать классом ComplexError:
import { ComplexError } from '@morphcluster/core'
...
const name = "Test" //Имя исключения
//Дополнительные данные исключения в виде объекта (опционально)
const payload = { "mydata":123 }
//Опции
const options = {
//Показывать ли внешнему серверу (FastifyRest) содержимое ошибки
//Если пользователь - администратор, содержимое все равно будет показано
"showUser": true,
//Можно перегрузить HTTP код возврата в FastifyRest, по умолчанию 500
"httpStatus": 403,
//Если цепочку логов создавали в этом методе, можно передать ее id в исключении
//FastifyRest вернет этот ID, чтобы цепочку было проще найти
"logId": "..."
}
throw new ComplexError( "Сообщение исключения", name, payload, options )
Данные внутри такого исключения будут переданы в т.ч. и удаленным сервисам