Контекст

Когда вы вызываете действие или создаете событие, брокер создает экземпляр контекста Context, который содержит всю информацию о запросе и передает его обработчику действия/события в качестве единого аргумента.

Свойства Context

Имя Тип Описание
ctx.id String ID контекста
ctx.broker ServiceBroker Объект брокера.
ctx.nodeID String ID вызывающего или целевого узла.
ctx.action Object Экземпляр действия.
ctx.event Object Экземпляр события.
ctx.eventName Object Имя созданного события.
ctx.eventType String Тип события (“emit” или “broadcast”).
ctx.eventGroups Array<String> Группа событий.
ctx.caller String Полное имя вызывающего сервиса. Пример: v3.myService
ctx.requestID String ID запроса. Если вы совершаете вложенные вызовы, то ID будет одинаковый.
ctx.parentID String ID родительского контекста (во вложенных вызовах).
ctx.params Any Параметры запроса. Второй аргумент в broker.call.
ctx.meta Any Мета-данные запроса. Они также будут переданы на вложенные вызовы.
ctx.locals Any Локальные данные.
ctx.level Number Уровень запроса (во вложенных вызовах). Первый уровень 1.
ctx.span Span Текущий активный интервал.

Методы Контекста

Название Ответ Описание
ctx.call() Promise Создание вложенного вызова. Те же аргументы, как в broker.call
ctx.emit() void Создать событие, аналогично broker.emit
ctx.broadcast() void Создать событие, адресованное всем узлам, аналогично broker.broadcast
ctx.startSpan(name, opts) Span Создать интервал-потомок.
ctx.finishSpan(span) void Завершить интервал.
ctx.toJSON() Object Преобразовать Контекст в JSON формат.
ctx.copy() this Создать копию Context экземпляра.

Отслеживание Контекста

Если вы хотите, чтобы сервисы плавно отключались, включите функцию отслеживания контекста в опциях брокера. Тогда сервисы будут ожидать завершения процессов в активных контекстах, перед тем как отключаться. Время таймаута задается через опцию брокера shutdownTimeout. Значение по-умолчанию 5 секунд.

Пример включения отслеживания контекста и установка таймаута:

const broker = new ServiceBroker({
nodeID: "node-1",
tracking: {
enabled: true,
shutdownTimeout: 10 * 1000
}
});

Время таймаута может быть переопределено через свойство $shutdownTimeout в настройках сервиса.

Отмена слежения в опциях вызова:

await broker.call("posts.find", {}, { tracking: false });