Перейти к содержанию

Отправка произвольного события

Сценарий. Отправить событие, не связанное с конкретным объектом метаданных — например, доменное событие «пользователь вошёл в систему», «заказ отменён», «алерт».

Код

Событие = Новый Структура;
Событие.Вставить("event",     "user.login");
Событие.Вставить("user",      ТекущийПользователь().Имя);
Событие.Вставить("timestamp", ТекущаяДатаСеанса());

// Готовое сообщение — сериализация пропускается
Сообщение = кфкИнтеграция.ПараметрыСообщения(Событие, СтрокаUUID());

// Маршрутизация выполняется по ТипОбъект — этот ключ настроен в продюсере
// в табличной части «Объекты метаданных». Ссылку на сам продюсер указывать не нужно.
кфкИнтеграция.ПоместитьВОчередьИсходящих(Сообщение, "system.events");

Как работает

  1. ПараметрыСообщения(Данные, Ключ) формирует готовое описание сообщения.
  2. При передаче готового описания в ПоместитьВОчередьИсходящих этап сериализации пропускается — данные считаются уже подготовленными.
  3. ТипОбъект ("system.events" в примере) — ключ регистрации. Адаптер ищет продюсер, у которого в табличной части «Объекты метаданных» есть строка с точно таким же значением в колонке «Тип объект».

Произвольный ключ vs имя метаданных

"system.events" — намеренно не совпадает с именем метаданных 1С. Это означает, что автоматическая регистрация при записи объектов не сработает — сообщения будут попадать в топик только через явный вызов ПоместитьВОчередьИсходящих(..., "system.events").

Если бы в продюсере было указано "Справочник.Номенклатура", то помимо API-вызовов сработала бы ещё и подписка на запись справочника. Подробнее — Тип объект — ключ регистрации.

Как получать ссылку на продюсер

Прикладному коду редко нужна прямая ссылка на продюсер — правильный путь зависит от сценария:

Сценарий Как получать продюсер
Внутри обработчика продюсера Свойства.Продюсер — ссылка уже передана в параметре, дополнительный поиск не нужен. См. Обработчик продюсера — поля Свойства.
В прикладном коде при постановке в очередь Не указывайте продюсер явно — передавайте ТипОбъект, и адаптер сам выберет продюсер, настроенный на этот тип.

Не используйте НайтиПоНаименованию

При переименовании продюсера пользователем обмен сломается без предупреждения. Предопределённых элементов в справочнике кфкПродюсеры нет и не планируется — адаптер нейтрален к конкретным продюсерам вашей конфигурации.

Добавление заголовков

Заголовки — это полезные метаданные, которые принимающая сторона может использовать без разбора тела:

Сообщение = кфкИнтеграция.ПараметрыСообщения(Событие, СтрокаUUID());
Сообщение.Заголовки.Вставить("source",       "crm");
Сообщение.Заголовки.Вставить("content-type", "application/json");
Сообщение.Заголовки.Вставить("version",      "1");

кфкИнтеграция.ПоместитьВОчередьИсходящих(Сообщение, , Продюсер);

Смотрите также