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

Пример 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С:Шину» завершен.

См. также