ServiceBroker является основным компонентом Moleculer. Он обрабатывает действия и события сервиса, а так же общается с удаленными узлами. Экземпляр ServiceBroker должен быть запущен на каждом узле.
Создание ServiceBroker
Подсказка: Вам не нужно создавать вручную ServiceBroker в вашем проекте. Используйте Moleculer Runner для создания брокера и загрузки сервисов. Подробнее о Moleculer Runner.
Создание брокера с настройками по умолчанию:
| const { ServiceBroker } = require("moleculer"); | 
Создание брокера с пользовательскими настройками:
| const { ServiceBroker } = require("moleculer"); | 
Создание брокера с транспортом к удаленными узлами:
| const { ServiceBroker } = require("moleculer"); | 
Опции метаданных
Используйте свойство metadata для передачи пользовательских данных. Это может быть полезно для пользовательских middleware или strategy стратегии.
| const broker = new ServiceBroker({ | 
Свойство
metadataможно получить запустив действие$node.list.
Свойство
metadataпередается другим узлам.
Пинг
Для пинга удаленных узлов используется метод broker.ping. Вы можете пинговать конкретный узел или все доступные узлы. Он возвращает Promise который содержит принятый ответ (задержка, разница времени). Можно задать значение таймаута.
Пинговать узел с таймаутом в 1 секунду
| broker.ping("node-123", 1000).then(res => broker.logger.info(res)); | 
Вернет
| { | 
Значение
timeDiffявляется разницей системных часов между этими узлами.
Пинг нескольких узлов
| broker.ping(["node-100", "node-102"]).then(res => broker.logger.info(res)); | 
Вернет
| { | 
Пинг всех доступных узлов
| broker.ping().then(res => broker.logger.info(res)); | 
Вернет
| { | 
Свойства ServiceBroker
| Название | Тип | Описание | 
|---|---|---|
| broker.options | Object | Опции брокера. | 
| broker.Promise | Promise | Класс Bluebird Promise. | 
| broker.started | Boolean | Состояние брокера. | 
| broker.namespace | String | Пространство имён. | 
| broker.nodeID | String | Идентификатор узла. | 
| broker.instanceID | String | Идентификатор экземпляра. | 
| broker.metadata | Object | Метаданные из опций брокера. | 
| broker.logger | Logger | Класс логгера из ServiceBroker. | 
| broker.cacher | Cacher | Экземпляр кэша | 
| broker.serializer | Serializer | Экземпляр сериализатора. | 
| broker.validator | Any | Экземпляр валидатора параметров. | 
| broker.services | Array<Service> | Локальные сервисы. | 
| broker.metrics | MetricRegistry | Встроенный реестр метрик. | 
| broker.tracer | Tracer | Встроенный экземпляр трассировки. | 
| broker.errorRegenerator | Regenerator | Built-in Regenerator instance. | 
Методы ServiceBroker
| Название | Ответ | Описание | 
|---|---|---|
| broker.start() | Promise | Запустить брокер. | 
| broker.stop() | Promise | Остановить брокер. | 
| broker.repl() | - | Запустить режим REPL. | 
| broker.errorHandler(err, info) | - | Вызов глобального обработчика ошибок. | 
| broker.getLogger(module, props) | Logger | Получить дочерний логгер. | 
| broker.fatal(message, err, needExit) | - | Бросить ошибку и выйти из процесса. | 
| broker.loadServices(folder, fileMask) | Number | Загрузить сервисы из папки. | 
| broker.loadService(filePath) | Service | Загрузить сервис из файла. | 
| broker.createService(schema, schemaMods) | Service | Создать сервис из схемы. | 
| broker.destroyService(service) | Promise | Уничтожьте загруженный локальный сервис. | 
| broker.getLocalService(name) | Service | Получить экземпляр локального сервиса по полному имени (например v2.posts) | 
| broker.waitForServices(serviceNames, timeout, interval) | Promise | Дождаться сервиса. | 
| broker.call(actionName, params, opts) | Promise | Вызвать действие из сервиса. | 
| broker.mcall(def) | Promise | Вызов нескольких действий одновременно. | 
| broker.emit(eventName, payload, opts) | - | Отправить событие через балансировщик. | 
| broker.broadcast(eventName, payload, opts) | - | Отправить широковещательное событие. | 
| broker.broadcastLocal(eventName, payload, opts) | - | Отправить широковещательное событие только локальным сервисам. | 
| broker.ping(nodeID, timeout) | Promise | Пинг удаленных узлов. | 
| broker.hasEventListener("eventName") | Boolean | Проверить наличие слушателей события. | 
| broker.getEventListeners("eventName") | Array<Object> | Получить всех зарегистрированных слушателей указанного события. | 
| broker.generateUid() | String | Создать UUID токен. | 
| broker.callMiddlewareHook(name, args, opts) | - | Вызвать асинхронный хук в зарегистрированных middlewares. | 
| broker.callMiddlewareHookSync(name, args, opts) | - | Вызвать синхронный хук в зарегистрированных middlewares. | 
| broker.isMetricsEnabled() | Boolean | Проверить, что функция сбора метрик включена. | 
| broker.isTracingEnabled() | Boolean | Проверить, что функция трассировки включена. | 
Глобальный обработчик ошибок
Глобальный обработчик ошибок является основным способом обработки исключений. Он выявляет ошибки в обработчиках действий и событий.
Поймать, обработать и записать в лог
| const broker = new ServiceBroker({ | 
Поймать и бросить исключение дальше
| const broker = new ServiceBroker({ | 
Объект
infoсодержит экземпляры брокера и сервиса, текущий context и определение действия или события.