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

Прямой API — примеры

Сценарий. Синхронная отправка / чтение сообщений без участия очереди и фоновых заданий. Подходит для разовых операций, тестов, команд с ожиданием подтверждения.

Справочное описание методов — Прямой API.

Синхронная отправка — один раз

Сообщение = кфкИнтеграция.ПараметрыСообщения("{""event"": ""ping""}", СтрокаUUID());
// Ссылку на продюсер предоставляет сервисный модуль прикладного решения
// (например, читает из настройки/константы своей конфигурации)
Продюсер  = СервисныйМодуль.ПродюсерСистемныхСобытий();

Результат = кфкИнтеграция.Отправить(Продюсер, "system-events", Сообщение);
Если Не Результат.Успешно Тогда
    ВызватьИсключение Результат.ТекстОшибки;
КонецЕсли;

Откуда брать ссылку на продюсер

Прямой API требует явную ссылку СправочникСсылка.кфкПродюсеры. Получать её следует из сервисного модуля прикладного решения — он сам решает, как хранить идентификатор (константа, параметр ИБ, настройка).

Не используйте Справочники.кфкПродюсеры.НайтиПоНаименованию(...) — переименование в режиме 1С:Предприятие сломает обмен. Предопределённых элементов в справочнике кфкПродюсеры нет и не будет. Подробнее — Произвольные события → Как получать ссылку на продюсер.

Синхронная отправка — пакетом

При пакетной отправке держите соединение открытым, передавая общее Соответствие сессий:

Сессии = Новый Соответствие;
Попытка
    Для Каждого Элемент Из МассивДанных Цикл
        Сообщение = кфкИнтеграция.ПараметрыСообщения(Элемент.JSON, Элемент.Ключ);
        // 4-й параметр "Партиция" оставляем по умолчанию (-1 = авто)
        кфкИнтеграция.Отправить(Продюсер, "my-topic", Сообщение, , Сессии);
    КонецЦикла;
Исключение
    кфкИнтеграция.ЗакрытьСессииПродюсера(Сессии);
    ВызватьИсключение;
КонецПопытки;
кфкИнтеграция.ЗакрытьСессииПродюсера(Сессии);

Всегда закрывайте сессии

Вызывайте ЗакрытьСессииПродюсера в том числе в блоке исключения — иначе соединение зависнет и будет удерживать ресурсы на сервере 1С.

Синхронное чтение

// Ссылку на консьюмер возвращает сервисный модуль прикладного решения
Консьюмер = СервисныйМодуль.КонсьюмерДляСинхронногоЧтения();
Сессии    = Новый Соответствие;

// АвтоФиксацияСмещения = Истина — смещения фиксируются автоматически и периодически в фоне
Результат = кфкИнтеграция.Прочитать(Консьюмер, Истина, Сессии);

Если Результат.Успешно И Результат.Сообщение <> Неопределено Тогда
    Тело     = Результат.Сообщение.Тело;
    Ключ     = Результат.Сообщение.Ключ;
    Топик    = Результат.Сообщение.Топик;
    Раздел   = Результат.Сообщение.Раздел;
    Смещение = Результат.Сообщение.Смещение;

    ОбработатьСообщение(Тело, Ключ);
КонецЕсли;

кфкИнтеграция.ЗакрытьСессииКонсьюмера(Сессии);

Когда выбирать

  • Синхронная команда с ожиданием ответа — прямой API.
  • Чтение одного сообщения для диагностики или теста — прямой API.
  • Регулярный обмен, миллион сообщений в сутки — очередь (не прямой API).

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