В мире современных корпоративных информационных систем ручной или файловый обмен данными давно стал пережитком прошлого. Ранее разработчикам на платформе 1С:Предприятие приходилось самостоятельно конструировать «велосипеды» для связывания баз данных: использовать FTP-серверы, обмениваться XML-файлами через электронную почту или интегрировать сторонние брокеры сообщений, такие как RabbitMQ и Apache Kafka. Каждый такой проект требовал написания сотен строк кода и постоянной поддержки со стороны системных администраторов.
С выходом нового решения «1С:Шина» экосистема получила собственный промышленный класс систем интеграции уровня предприятия (Enterprise Service Bus — ESB). Мы подробно разберем, что представляет собой этот продукт, как он взаимодействует с классическими механизмами платформы и решает ли он проблемы, озвученные разработчиками на форумах.
Проанализируем технологический стек нового решения. Вопреки распространенному мнению, что «1С:Шина» — это просто очередная конфигурация, написанная на встроенном языке 1С, архитектура продукта принципиально иная:
Рассмотрим детально, как сообщение проходит путь от базы-источника до базы-получателя через «1С:Шину». Выясним причину, почему этот механизм называют гарантированной доставкой.
1С:ERP) при проведении документа срабатывает событие. Платформа формирует сообщение обмена.В процессе обсуждения на форумах часто возникает вопрос: заменяет ли «1С:Шина» классический механизм планов обмена с их таблицами регистрации изменений? Разберем эту ситуацию подробно.
План обмена и Интеграционная шина выполняют абсолютно разные, но взаимодополняющие задачи:
Таким образом, мы не отказываемся от планов обмена. Мы используем их для фиксации изменений, но саму отправку делегируем встроенному в платформу объекту СервисИнтеграции, который передает пакеты напрямую в шину.
Давайте посмотрим на практический пример того, как программист может программно отправить сообщение в настроенный канал интеграции. Для этого в платформу версии 8.3.17 был добавлен объект СервисыИнтеграции.
Рассмотрим пример кода для отправки произвольного сообщения:
// Инициализируем соединение с сервисом интеграции
ИмяСервиса = "УправлениеПродажами";
Сервис = СервисыИнтеграции[ИмяСервиса];
// Создаем новое интеграционное сообщение
НовоеСообщение = Сервис.СоздатьСообщение();
// Заполняем тело сообщения (например, структура в формате JSON)
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("КодПартнера", "П0000432");
ДанныеДляОтправки.Вставить("НовоеНаименование", "ООО Вектор-С");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
НовоеСообщение.Тело.УстановитьСтроку(СтрокаJSON);
// Добавляем пользовательские параметры (заголовки) для маршрутизации в шине
НовоеСообщение.Параметры.Вставить("ТипСобытия", "ОбновлениеПартнера");
НовоеСообщение.Параметры.Вставить("ВерсияФормата", "1.0");
// Отправляем сообщение в конкретный канал сервиса интеграции
Сервис.Отправить("КаналПартнеры", НовоеСообщение);
В данном примере сообщение гарантированно попадет в локальный буфер платформы и при первой возможности будет отправлено в «1С:Шину». Обратите внимание, что мы можем задавать любые произвольные параметры сообщения, которые впоследствии помогут шине правильно направить сообщение получателям.
Теперь проанализируем, как принимающая информационная база получает отправленные данные. Нам больше не нужно запускать периодические регламентные задания для опроса каталогов обмена. Получение сообщений работает по событийной модели.
В конфигурации-получателе для соответствующего СервисаИнтеграции настраивается обработчик ожидания или метод обработки. Посмотрим на шаблон такого кода:
// Данная процедура вызывается платформой автоматически при поступлении сообщения в канал
Процедура ПриПолученииСообщения(Сообщение, Отправитель) Экспорт
// Получаем тип события из параметров заголовка
ТипСобытия = "";
Если Сообщение.Параметры.Свойство("ТипСобытия", ТипСобытия) Тогда
Если ТипСобытия = "ОбновлениеПартнера" Тогда
СтрокаДанных = Сообщение.Тело.ПолучитьСтроку();
// Десериализуем и обрабатываем данные
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаДанных);
ДанныеПартнера = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Вызываем процедуру обновления данных в базе
ОбновитьДанныеКонтрагентаВБазе(ДанныеПартнера);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот подход позволяет добиться мгновенной (on-line) синхронизации баз данных с минимальной нагрузкой на СУБД. Нам не нужно постоянно опрашивать таблицы базы данных — платформа сама разбудит фоновый процесс при получении сообщения.
Современный ИТ-ландшафт предприятия редко ограничивается только программными продуктами 1С. Важным преимуществом «1С:Шины» является кросс-системная интеграция. Рассмотрим, какие протоколы и интерфейсы поддерживает сервер интеграции:
Выясним преимущества и недостатки использования специализированного решения от 1С по сравнению с популярными OpenSource-продуктами:
Преимущества «1С:Шины»:
Недостатки и особенности:
Подводя итоги нашего детального обзора, можно с уверенностью сказать, что появление «1С:Шины» — это долгожданный качественный скачок в развитии интеграционных технологий фирмы 1С. Это решение идеально подходит для средних и крупных предприятий с разветвленной ИТ-архитектурой, где эксплуатируются десятки баз данных 1С и сторонних информационных систем.
Мы рекомендуем использовать этот инструмент для построения надежных шин данных, отказавшись от нестабильных файловых и веб-сервисных самописных интеграций в пользу гарантированной асинхронной доставки сообщений.