Перейти к основному содержимому

Пример 2. Настройка обмена сообщениями между базой на платформе «1С:Предприятие» и брокером сообщений RabbitMQ

совет

В данном примере используется демонстрационная конфигурация информационной базы «Офис». Ее можно скачать по ссылке.

«1С:Шина» поддерживает обмен данными со сторонними брокерами сообщений:

  • Протокол AMQP позволяет обмениваться с RabbitMQ.
  • Стандарт JMS позволяет обмениваться с Apache ActiveMQ Artemis.

Далее рассматривается пример настройки обмена данными между базой на платформе «1С:Предприятие» и брокером сообщений RabbitMQ.

В примере выполняется отправка сообщения из RabbitMQ в «1С:Шину», которое поступает в базу, работающую на платформе «1С:Предприятие».

В ходе этого примера вы:

  • В панели управления брокером сообщений RabbitMQ:
    • создадите очередь сообщений.
  • В среде разработки «1С:Шины»:
    • создадите проект и настроите в нем процесс интеграции;
    • опубликуете проект на сервере и создадите приложение;
    • проверите работоспособность приложения.
  • На сервере «1С:Шины»:
    • заполните параметры для подключения к RabbitMQ;
    • создадите информационную систему;
    • включите ее в состав процесса интеграции;
    • запустите процесс интеграции.
  • Создадите демонстрационную базу «1С:Предприятия»:
    • добавите сервис интеграции;
    • загрузите в него информацию о доступных каналах;
    • напишете код обработки полученного сообщения;
    • настроите подключение к серверу «1С:Шины» в режиме «1С:Предприятие».
  • Проверите обмен сообщениями.

Создание очереди сообщений в RabbitMQ​

На этом этапе в брокере сообщений необходимо создать очередь сообщений, через которую мы будем отправлять сообщение.

  • Откройте панель управления RabbitMQ:

  • Перейдите на вкладку Queues and Streams. Нажмите на ссылку Add a new queue. Заполните поле Name, введя название очереди TestChannel1C, и нажмите Add queue:

Создание проекта​

На этом этапе вы создадите в среде разработки «1С:Шины» проект с описанием схемы интеграции и опубликуете его на сервере «1С:Шины», создав приложение.

  1. Создайте новое приложение с файловой СУБД и откройте его в режиме разработки.
  2. Добавьте новый элемент проекта — процесс интеграции. Назовите его ОбменСКроликом и установите для его свойства СправочникУчастников значение ИнформационныеСистемы.

«1С:Шина» создаст в проекте новый процесс интеграции и откроет редактор для создания его схемы.

Редактирование схемы процесса интеграции​

На этом этапе вы создадите схему процесса интеграции, которая описывает взаимодействие информационных систем. Вы можете выполнить все действия самостоятельно или воспользоваться готовым примером из YAML-файла ниже и перейти к публикации приложения.

Пример YAML-файла процесса интеграции
ВидЭлемента: ПроцессИнтеграции
ОбластьВидимости: ВПодсистеме
Ид: fa5f490e-68ee-41cf-819c-d519586aea0b
Имя: ОбменСКроликом
СправочникУчастников: e1c::Проект2::Основной::ИнформационныеСистемы
Схема:
ГруппыУчастников:
-
Ид: ad5fca45-050f-4989-bfd8-6b8093c12bac
Имя: Офис
X: 74
Y: 380
Высота: 60
Ширина: 138
Маршруты:
-
Ид: d829cff8-1148-4a37-8cb1-346595018dc3
В: ВОфис
Из: RabbitMqИсточник
Точки:
-
X: 143
Y: 245
-
X: 150
Y: 245
-
X: 150
Y: 242
-
X: 143
Y: 242
Параметры:
-
Имя: ChannelName
Тип: Строка
-
Имя: Host
Тип: Строка
-
Имя: Login
Тип: Строка
-
Имя: Password
Тип: Строка
Связи:
-
Ид: cd8e1699-2cb3-449a-a885-3f261bd2cba7
Группа: Офис
НаправлениеСвязи: ИзУзлаВГруппу
Узел: ВОфис
Точки:
-
X: 143
Y: 357
-
X: 143
Y: 357
Узлы:
-
Вид: RabbitMqИсточник
Ид: 0816abbd-e034-49b9-b45b-ffd55355fb21
Имя: RabbitMqИсточник
X: 60
Y: 150
Высота: 63
ИмяКанала: ="%{Параметры.ChannelName}"
ИмяПользователя: ="%{Параметры.Login}"
Пароль: ="%{Параметры.Password}"
Хост: ="%{Параметры.Host}"
Ширина: 166
-
Вид: Канал1СНазначение
Ид: d83e26b1-f952-481e-a084-4a265b5a016c
Имя: ВОфис
X: 73
Y: 273
Высота: 62
Ширина: 140
  1. Добавьте на схему источник RabbitMQ. Для этого прокрутите палитру узлов, выберите RabbitMQИсточник и кликните в верхней части схемы, чтобы разместить его там:

    Добавление узла «RabbitMQИсточник»

  2. Добавьте на схему узел Канал1СНазначение, щелкните по нему два раза и задайте имя — ВОфис:

    Добавление узла «Канал1СНазначение»

  3. Добавьте на схему узел ГруппаУчастников и задайте имя — Офис:

    Добавление узла «ГруппаУчастников»

  4. Свяжите узел RabbitMQИсточник маршрутом с узлом ВОфис. Для этого выберите в панели Маршрут, а затем кликните последовательно на узел RabbitMQИсточник и на узел ВОфис:

    Добавление маршрута между узлами «RabbitMQИсточник» и «ВОфис»

  5. Свяжите узел ВОфис с группой участников Офис. Для этого прокрутите палитру узлов, выберите Связь, а затем кликните последовательно на узел ВОфис и на группу участников Офис:

    Добавление маршрута между узлами «Офис» и «ВОфис»

  6. Теперь следует создать параметры процесса интеграции. В подсистеме Основной выберите процесс интеграции ОбменСКроликом, нажмите на значок плюса и выберите параметр. Назовите его ChannelName. Этот параметр будет отвечать за название очереди сообщений в RabbitMQ.

    Добавление параметра «ChannelName»

  7. По аналогии создайте еще три параметра интеграционных процессов:

    • Host – адрес сервера, где располагается RabbitMQ;
    • Login – логин для RabbitMQ;
    • Password – пароль для RabbitMQ.

    Добавление всех необходимых параметров

  8. Заполните параметры источника RabbitMqИсточник.. Для этого кликните на узел RabbitMqИсточник и откройте панель Свойства. В поле Имя канала выберите параметр ChannelName, в поле Хост – Host, в поле Имя пользователя – Login, в поле Пароль – Password:

    Заполнение параметров источника RabbitMq

Публикация и открытие приложения​

Чтобы опубликовать и открыть приложение, выполните следующие действия:

  1. Нажмите Ctrl+F5. Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера.

  2. После успешной авторизации вы увидите приложение, а в нем — список существующих процессов интеграции. В примере это будет единственный процесс интеграции ОбменСКроликом:

    Запущенное приложение

Настройка приложения в панели управления​

  1. Откройте приложение.
  2. Создайте инфосистему с кодом office и наименованием Офис.
  3. Получите для нее ключ и секрет клиента. Скопируйте их, чтобы позднее использовать при подключении информационной базы к серверу «1С:Шины».
  4. Перейдите на вкладку Процессы и нажмите на процесс Основной::ОбменСКроликом. Вы увидите схему процесса интеграции и панель свойств схемы. На схеме выберите группу Офис. Добавьте в нее информационную систему office.

Далее необходимо заполнить параметры узла RabbitMqИсточник, с помощью которых «1С:Шина» взаимодействует с брокером RabbitMQ.

  1. На схеме выберите узел RabbitMqИсточник и в правом нижнем углу нажмите Параметры:

    Параметры источника RabbitMQ

  2. Заполните параметры следующим образом:

    • ChannelName – название канала (в примере: TestChannel1C);
    • Host – адрес сервера, где располагается RabbitMQ (например: localhost);
    • Login – логин для RabbitMQ;
    • Password – пароль для RabbitMQ.

    Нажмите Применить. Когда параметры будут применены, нажмите Запустить в правом верхнем углу:

    Ввод параметров источника RabbitMQ

Следующим шагом мы создадим и настроим информационную базу 1С:Предприятия.

Создание информационной базы «1С:Предприятия» с использованием «1С:EDT»​

  1. Откройте «1C:EDT». В стартовом окне нажмите Начать работу:

  2. Откроется перспектива «1С:Предприятия»:

  3. Откройте панель Информационные базы. По умолчанию она находится в правой части экрана. Однако если вы ее закрыли, вы можете открыть эту панель из главного меню основного окна, нажав Окно ⟶ Показать панель ⟶ Информационные базы:

  4. В открывшемся окне нажмите Добавить:

  5. По умолчанию будет выбран пункт Создание новой информационной базы. Оставьте выбор без изменений и нажмите Далее:

  6. Выберите пункт Создание информационной базы без конфигурации и нажмите далее:

  7. Введите название информационной базы. Тип размещения файла выберите На данном компьютере или на компьютере в локальной сети. Нажмите Далее:

  8. Система автоматически предложит вам каталог для сохранения информационной базы. Его можно оставить без изменений. Нажмите Далее:

  9. В открывшемся окне ничего изменять не нужно. Нажмите Готово:

  10. Информационная база создана. Теперь вы сможете увидеть ее на панели Информационные базы:

  11. Далее следует загрузить конфигурацию информационной базы (office_template.cf) в созданную пустую информационную базу. Для этого необходимо открыть базу в режиме Конфигуратор. Чтобы это сделать, кликните правой кнопкой мыши на информационную базу и выберите Запустить Конфигуратор:

  12. Откроется окно Конфигуратора. Если запуск информационной базы в этом режиме выполняется в первый раз, структура конфигурации будет скрыта; чтобы открыть ее нажмите Конфигурация ⟶ Открыть конфигурацию:

    Будет открыта панель Конфигурация.

  13. Чтобы загрузить конфигурацию из CF-файла, выполните следующие действия: нажмите Конфигурация ⟶ Загрузить конфигурацию из файла:

  14. Будет открыт системный диалог выбора файла. Выберите CF-файл, нажмите Открыть:

  15. Если информационная база уже содержит конфигурацию, конфигуратор предупредит об этом. Нажмите Да.

  16. Конфигурация из CF-файла будет загружена в информационную базу как основная конфигурация. Конфигуратор задаст вопрос об обновлении конфигурации базы данных, нажмите Да:

  17. Конфигуратор сообщит о том, что будет выполнена реструктуризация базы данных, нажмите Принять:

    Конфигурация базы данных будет обновлена. Закройте Конфигуратор.

  18. Вернитесь в «1С:EDT». Следующим шагом в панели Информационные базы выберите базу с той конфигурацией, разработку которой вы хотите перевести в «1C:EDT». Перетащите эту информационную базу в панель Навигатор:

  19. В открывшемся окне нажмите Импорт:

  20. После загрузки конфигурация базы отобразится слева в окне Навигатор:

После того как мы создали информационную базу «1С:Предприятия», можно переходить к ее настройке.

Настройка информационной базы «1С:Предприятия»​

В информационной базе Офис вы создадите объект конфигурации Сервис интеграции, взаимодействующий с севером «1С:Шины». Под управлением этого сервиса интеграции будет работать один канал. По каналу ОбменСКроликом сообщения от RabbitMQ будут поступать в базу Офис.

  1. Добавьте сервис интеграции с именем ОбменСКроликом. Для этого откройте вкладку Общее, затем правой кнопкой мыши нажмите Сервисы интеграции, в контекстном меню выберите Создать ⟶ Сервис интеграции:

  2. Заполните имя для сервиса интеграции. Нажмите Готово:

  3. Откройте приложение «1С:Шины» в браузере и скопируйте адрес приложения:

  4. Вернитесь в среду разработки и установите скопированный адрес в качестве значения свойства Адрес внешнего сервиса интеграции:

    Чтобы сохранить изменения, нажмите Ctrl + S.

  5. Правой кнопкой мыши нажмите на сервис интеграции ОбменСКроликом и выберите Загрузить каналы:

  6. В открывшейся форме укажите идентификатор клиента и секрет клиента, полученные на этапе создания информационной системы Офис в приложении «1С:Шины». Затем нажмите кнопку Получить каналы сервиса:

  7. В списке отобразится канал из схемы процесса интеграции. Убедитесь, что рядом с ним стоит галочка и нажмите Загрузить:

  8. Дважды кликните на добавленный канал интеграции. В панели Свойства, в поле Имя канала внешнего сервиса интеграции по умолчанию может стоять Основной_ОбменСКроликом.ВОфис. Вам следует изменить это значение на e1c::Проект2::Основной::ОбменСКроликом.ВОфис. Имя канала должно совпадать с тем названием, которое у вас указано в «1С:Шине», и именем узла Канал1СНазначение:

  9. Затем, в панели Свойства, в поле Обработчик получения сообщения кликните на значок лупы. Перед вами откроется окно обработчика получения сообщения канала Основной_ОбменСКроликом_ВОфисОбработкаПолученияСообщения:

  10. Напишите код обработчика Основной_ОбменСКроликом_ВОфисОбработкаПолученияСообщения.

    Код обработчика Основной_ОбменСКроликом_ВОфисОбработкаПолученияСообщения
    Процедура Основной_ОбменСКроликом_ВОфисОбработкаПолученияСообщения(Сообщение, Отказ)
    РазмерСообщения = Сообщение.Параметры.Получить("РазмерСообщения");
    Если РазмерСообщения <> Неопределено Тогда
    РазмерБуфера = Число(РазмерСообщения);

    Иначе
    РазмерБуфера = 1024;

    КонецЕсли;

    Тело = Новый БуферДвоичныхДанных(0);
    Буфер = Новый БуферДвоичныхДанных(РазмерБуфера);

    Поток = Сообщение.ПолучитьТелоКакПоток();

    Пока Истина Цикл
    Прочитано = Поток.Прочитать(Буфер, 0, РазмерБуфера);

    Если Прочитано > 0 Тогда
    Тело = Тело.Соединить(Буфер);

    КонецЕсли;

    Если Прочитано < РазмерБуфера Тогда
    Прервать;

    КонецЕсли;

    КонецЦикла;

    Отчет = ПолучитьСтрокуИзБуфераДвоичныхДанных(Тело);

    ПисьмоОбъект = Справочники.ВходящиеПисьма.СоздатьЭлемент();
    ПисьмоОбъект.Наименование = "Письмо от Кролика";
    ПисьмоОбъект.Дата = ТекущаяДата();
    ПисьмоОбъект.ПочтовыйЯщик = "POP3";
    ПисьмоОбъект.ВидСодержимого = Перечисления.ВидСодержимогоВходящегоПисьма.HTML;

    ПисьмоОбъект.УстановитьСсылкуНового(Справочники.ВходящиеПисьма.ПолучитьСсылку());

    ПисьмоОбъект.Текст = "\n" + СтрЗаменить(СтрЗаменить(Отчет, Символ(0), ""), Символы.ПС, "\n") + "\n";
    НЗ = РегистрыСведений.СостояниеВходящихПисем.СоздатьНаборЗаписей();
    НЗ.Отбор.Письмо.Установить(ПисьмоОбъект.ПолучитьСсылкуНового());
    Запись = НЗ.Добавить();
    Запись.Письмо = ПисьмоОбъект.ПолучитьСсылкуНового();
    Запись.Прочитано = Ложь;
    НЗ.Записать();
    ПисьмоОбъект.Записать();
    КонецПроцедуры

    Сохраните изменения, нажав Ctrl + S.

  11. Создайте регламентное задание с именем СервисыИнтеграции. Для этого правой кнопкой мыши нажмите на Регламентные задание в панели Навигатор и выберите Создать ⟶ Регламентное задание:

  12. Заполните поле Имя и нажмите Готово:

  13. Откроется окно редактора. Поставьте галочкуПредопределенное. В поле Имя метода нажмите на значок лупы и в открывшемся списке выберите уже имеющийся обработчик СервисыИнтеграцииСервер. Нажмите ОК:

  14. Откроется окно редактора модуля обработчика. Проверьте, что в этом модуле обработчик регламентного задания содержит код:

    Процедура ВыполнениеОбработкиСервисовИнтеграции() Экспорт
    СервисыИнтеграции.ВыполнитьОбработку();
    КонецПроцедуры

    Сохраните изменения, нажав Ctrl + S.

    Если вы вдруг закрыли этот модуль и вам необходимо открыть его вновь, то из окна Навигатор перейдите на вкладку Общие модули ⟶ СервисыИнтеграцииСервер.

  15. Теперь следует задать расписание, по которому будет исполняться регламентное задание. Переключитесь в окно редактора регламентного задания СервисыИнтеграции. Затем перейдите на вкладку Расписание ⟶ Общее и установите Повторять каждые: 1 дн.:

  16. На вкладке Дневное задайте расписание задания Повторять через: 5 секунд:

    Сохраните изменения, нажав Ctrl + S.

Настройка конфигурации завершена. Теперь следует обновить конфигурацию информационной базы на ту конфигурацию, которую мы создали в проекте.

  1. Откройте панель Информационные базы (Окно ⟶ Показать панель ⟶ Информационные базы):

  2. Найдите в списке информационных баз ту, в которой необходимо обновить конфигурацию (в примере — БазаОфисОбменСКроликом). Нажмите на нее правой кнопкой мыши и выберите Обновить конфигурацию:

  3. В открывшемся окне убедитесь, что выбран необходимый проект и нужная информационная база. Нажмите Готово:

  4. Откроется окно с сообщением о том, что будет выполнена реструктуризация базы данных, нажмите Принять:

Теперь конфигурация информационной базы Офис соответствует той, которую мы создали в проекте.

Подключение информационных баз «1С:Предприятия 8» к серверу​

Вы настроили конфигурации БазаОфисОбменСКроликом так, что она готова к взаимодействию с использованием сервера «1С:Шины». Непосредственное подключение информационной базы «1С:Предприятия» к конкретному серверу выполняется уже в режиме «1С:Предприятие».

  1. Запустите информационную базу БазаОфисОбменСКроликом от имени пользователя с административными правами и откройте Функции для технического специалиста:

    Если данная опция не отображается, то вам следует вначале включить Режим технического специалиста:

    • Для этого кликните на символ выпадающего списка в правом верхнем углу и перейдите в раздел Настройки ⟶ Параметры:

    • Установите флажок рядом с параметром Режим технического специалиста. Нажмите Применить и закройте окно:

      Теперь включите Функции для технического специалиста.

  2. Разверните ветку Стандартные и откройте Управление сервисами интеграции:

  3. В списке доступных сервисов интеграции вы увидите единственную запись Обмен с кроликом — этот тот самый сервис интеграции, который вы создали в «1C:EDT». Чтобы настроить подключение к серверу «1С:Шины», нажмите правой кнопкой мыши на сервис и выберите Редактировать:

  4. В группе Настройки внешнего сервиса интеграции задайте свойства:

    • Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Офис в приложении «1С:Шины».
    • Пароль пользователя — секрет ключа. Нажмите ОК:

  5. Поставьте флажок рядом с записью и закройте окно:

На этом создание примера закончено, можно приступать к тестированию обмена сообщениями.

Тестирование обмена сообщениями​

  1. Откройте панель управления брокером сообщений RabbitMQ. Перейдите на вкладку Queues, затем кликните на очередь TestChannel1C:

  2. Перейдите в раздел Publish message. Заполните поле Headers и Payload и нажмите кнопку Publish message, чтобы отправить сообщение:

  3. Проверьте, что в панели управления «1С:Шины» увеличилось количество входящих и исходящих сообщений:

  4. Откройте базу БазаОфисОбменСКроликом и перейдите Предприятие ⟶ Входящие письма. Вы увидите сообщение от RabbitMQ:

На этом пример по отправке сообщения из стороннего брокера сообщений RabbitMQ в базу, работающую на платформе «1С:Предприятие», через «1С:Шину» завершен.

См. также​