Пример 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. Заполните поле Name, введя название очереди TestChannel1C, и нажмите Add queue:
Создание проекта
На этом этапе вы создадите в среде разработки «1С:Шины» проект с описанием схемы интеграции и опубликуете его на сервере «1С:Шины», создав приложение.
-
Откройте панель управления.
-
Нажмите Приложения ⟶ + Новое приложение:
-
Убедитесь, что выбраны варианты Из проекта и Новый проект:
-
Укажите поставщика, представление, имя и версию проекта. «1С:Шина» заполнит остальные поля и включит режим разработки для создаваемого приложения:
-
Выберите тип СУБД (в примере это будет Файловая СУБД) и нажмите Создать:
-
Новое приложение появится в списке со статусом Создается. Через некоторое время статус приложения изменится на Работает:
Добавление элемента проекта
На этом этапе вы откроете приложение в среде разработки и добавите в него элемент проекта — процесс интеграции.
-
Чтобы открыть проект в среде разработки, нажмите Разработать... в конце строки:
-
«1С:Шина» откроет новую вкладку браузера для среды разработки и запросит пароль. Введите пароль администратора, который вы указали при установке сервера, и нажмите Войти:
-
«1С:Шина» подготовит рабочую область, построит проект и откроет его в среде разработки:
-
Добавьте новый элемент проекта — процесс интеграции. Для этого в представлении НАВИГАТОР ПРОЕКТА нажмите правой кнопкой мыши Основной, затем в контекстном меню выберите Новый ⟶ Элемент проекта:
-
Выберите вид добавляемого элемента проекта — Процесс Интеграции:
-
Задайте имя создаваемого элемента — ОбменСКроликом — и нажмите Ввод:
-
«1С:Шина» создаст в проекте новый процесс интеграции и откроет редактор для создания его схемы:
Редактирование схемы процесса интеграции
На этом этапе вы создадите схему процесса интеграции, которая описывает взаимодействие информационных систем.
-
Добавьте на схему источник RabbitMQ. Для этого прокрутите палитру узлов, выберите RabbitMQИсточник и кликните в верхней части схемы, чтобы разместить его там:
-
Добавьте на схему узел Канал1СНазначение и задайте имя — ВОфис:
-
Добавьте на схему узел ГруппаУчастников и задайте имя — Офис.
-
Добавьте на схему группу участников. Для этого в палитре узлов, выберите ГруппаУчастников, разместите ее на схеме и задайте имя Офис:
-
Свяжите узел RabbitMQИсточник маршрутом с узлом ВОфис. Для этого выберите в панели Маршрут, а затем кликните последовательно на узел RabbitMQИсточник и на узел ВОфис:
-
Свяжите узел ВОфис с группой участников Офис. Для этого прокрутите палитру узлов, выберите Связь, а затем кликните последовательно на узел ВОфис и на группу участников Офис:
-
Теперь следует создать параметры процесса интеграции. В подсистеме Основная кликните правой кнопкой мыши на процесс интеграции ОбменСКроликом и добавьте новый элемент— Параметр процесса интеграции:
-
Назовите параметр ChannelName. Этот параметр будет отвечать за название очереди сообщений в RabbitMQ. Затем нажмите Ввод:
-
По аналогии, создайте еще три параметра интеграционных процессов:
-
Host – адрес сервера, где располагается RabbitMQ;
-
Login – логин для RabbitMQ;
-
Password – пароль для RabbitMQ.
-
-
Заполните созданными параметрами настройки Источника RabbitMqИсточник.. Для этого кликните на узел RabbitMqИсточник. В панели СВОЙСТВА заполните параметр Имя канала. Для этого нажмите на кнопку, раскрывающую параметры процесса. В открывшемся списке выберите созданный ранее параметр ChannelName:
-
Аналогично заполните остальные параметры: Хост как Host, Имя пользователя как Login, Пароль как Password:
-
Чтобы опубликовать проект на сервере, нажмите F9.
примечание -
За ходом обновления проекта вы можете наблюдать в левом углу строки состояния среды разработки. Статус updating изменится на статус running. Это говорит о том, что приложение было обновлено и запущено заново:
-
Откройте опубликованное приложение. Для этого нажмите на имя приложения в строке состояния слева. В открывшемся меню выберите Открыть приложение....
примечание -
Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера:
-
После успешной авторизации вы увидите приложение, а в нем — список процессов интеграции, существующих в приложении. В примере это будет единственный процесс интеграции ОбменСКроликом:
Настройка приложения в панели управления
-
Откройте приложение, если вдруг оно у вас закрыто.
-
Нажмите Инфосистемы ⟶ Добавить систему:
-
Задайте код системы — office и наименование — Офис. Нажмите Добавить:
-
Теперь для информационной системы нужно получить ключ, который она будет использовать при подключении к серверу «1С:Шины». Чтобы получить ключ, нажмите на информационную систему, а затем нажмите Выдать ключ API:
-
Скопируйте и сохраните Идентификатор ключа и Секрет клиента. Позднее вы будете использовать его при подключении информационной базы к серверу «1С:Шины»:
-
Перейдите на вкладку Процессы и нажмите на процесс Основной::ОбменСКроликом:
-
Вы увидите схему процесса интеграции и панель, позволяющую задавать свойства узлов этой схемы. На схеме выберите группу Офис, а затем нажмите Состав группы в правом нижнем углу:
-
Вы увидите список информационных систем, входящих в группу Офис. Сейчас в группе нет ни одной информационной системы. Установите флажок у информационной системы office и нажмите Добавить в группу:
-
Закройте окно Состав группы Офис.
Далее необходимо заполнить параметры у узла RabbitMqИсточник, которые позволят взаимодействовать «1С:Шины» с брокером RabbitMQ.
-
На схеме выберите узел RabbitMqИсточник и в правом нижнем углу нажмите Параметры:
-
Заполните параметры следующим образом:
-
ChannelName – заполните название канала (в примере: TestChannel1C);
-
Host – адрес сервера, где располагается RabbitMQ (например: localhost);
-
Login – логин для RabbitMQ;
-
Password – пароль для RabbitMQ;
Нажмите Применить:
-
-
Теперь можно запустить созданный процесс интеграции. Для этого нажмите Запустить в правом верхнем углу:
Следующим шагом мы создадим и настроим информационную базу 1С:Предприятие.
Создание информационной базы «1С:Предприятия» с использованием «1С:EDT»
-
Откройте «1C:EDT».
-
Откроется стартовое окно. Нажмите Начать работу:
-
Откроется перспектива 1С:Enterprise:
-
Откройте панель Информационные базы. По умолчанию она находится в правой части экрана. Однако если вы ее закрыли, вы можете открыть эту панель из главного меню основного окна, нажав Окно ⟶ Показать панель ⟶ Информационные базы:
-
В открывшемся окне нажмите Добавить:
-
По умолчанию будет выбран пункт Создание новой информационной базы. Оставьте выбор без изменений и нажмите Далее:
-
Выберите пункт Создание информационной базы без конфигурации... и нажмите далее:
-
Введите название информационной базы. Тип размещения файла выберите На данном компьютере или на компьютере в локальной сети. Нажмите Далее:
-
Система автоматически предложит вам каталог для сохранения информационной базы. Его можно оставить без изменений. Нажмите Далее:
-
В открывшемся окне ничего изменять не нужно. Нажмите Готово:
-
Информационная база создана. Теперь вы сможете увидеть ее на панели Информационные базы:
-
Далее следует загрузить конфигурацию информационной базы (office_template.cf) в созданную пустую информационную базу. Для этого необходимо открыть базу в режиме Конфигуратор. Чтобы это сделать, кликните правой кнопкой мыши на информационную базу и выберите Запустить Конфигуратор:
-
Откроется окно Конфигуратора. Если запуск информационной базы в этом режиме выполняется в первый раз, структура конфигурации будет скрыта; чтобы открыть ее нажмите Конфигурация ⟶ Открыть конфигурацию:
Будет открыта панель Конфигурация.
-
Чтобы загрузить конфигурацию из CF-файла, выполните следующие действия: нажмите Конфигурация ⟶ Загрузить конфигурацию из файла...:
-
Будет открыт системный диалог выбора файла. Выберите CF-файл, нажмите Открыть:
-
Если информационная база уже содержит конфигурацию, конфигуратор предупредит об этом. Нажмите Да.
-
Конфигурация из CF-файла будет загружена в информационную базу как основная конфигурация. Конфигуратор задаст вопрос об обновлении конфигурации базы данных, нажмите Да:
-
Конфигуратор сообщит о том, что будет выполнена реструктуризация базы данных, нажмите Принять:
Конфигурация базы данных будет обновлена. Закройте Конфигуратор.
-
Вернитесь в «1С:EDT». Следующим шагом в панели Информационные базы выберите базу с той конфигурацией, разработку которой вы хотите перевести в «1C:EDT». Перетащите эту информационную базу в панель Навигатор:
-
В открывшемся окне нажмите Импорт:
-
После загрузки конфигурация базы отобразится слева в окне Навигатор:
После того, как мы создали информационную базу «1С:Предприятия», можно переходить к ее настройке.
Настройка информационной базы «1С:Предприятия»
В информационной базе Офис вы создадите объект конфигурации Сервис интеграции, взаимодействующий с севером «1С:Шины». Под управлением этого сервиса интеграции будет работать один канал. По каналу ОбменСКроликом сообщения от RabbitMQ будут поступать в базу Офис.
-
Добавьте сервис интеграции с именем ОбменСКроликом. Для этого откройте вкладку Общее, затем правой кнопкой мыши нажмите Сервисы интеграции, в контекстном меню выберите Создать ⟶ Сервис интеграции:
-
Заполните имя для сервиса интеграции. Нажмите Готово:
-
Откройте приложение «1С:Шины» в браузере и скопируйте адрес приложения:
-
Вернитесь в среду разработки и установите скопированный адрес в качестве значения свойства Адрес внешнего сервиса интеграции:
Чтобы сохранить изменения, нажмите Ctrl + S.
-
Правой кнопкой мыши нажмите на сервис интеграции ОбменСКроликом и выберите Загрузить каналы:
-
В открывшейся форме укажите идентификатор клиента и секрет клиента, полученные на этапе создания информационной системы Офис в приложении «1С:Шины». Затем нажмите кнопку Получить каналы сервиса:
-
В списке отобразится канал из схемы процесса интеграции. Убедитесь, что рядом с ним стоит галочка и нажмите Загрузить:
-
Дважды кликните на добавленный канал интеграции. В панели Свойства, в поле Имя канала внешнего сервиса интеграции по умолчанию может стоять Основной_ОбменСКроликом.ВОфис. Вам следует изменить это значение на Основной::ОбменСКроликом.ВОфис:
Имя канала должно совпадать с тем названием, которое у вас указано в «1С:Шине»:
-
Затем, в панели Свойства, в поле Обработчик получения сообщения кликните на значок лупы. Перед вами откроется окно обработчика получения сообщения канала Основной_ОбменСКроликом_ВОфисОбработкаПолученияСообщения:
-
Напишите код обработчика Основной_ОбменСКроликом_ВОфисОбработкаПолученияСообщения:
Процедура Основной_ОбменСКроликом_ВОфисОбработкаПолученияСообщения(Сообщение, Отказ)
РазмерСообщения = Сообщение.Параметры.Получить("РазмерСообщения");
Если РазмерСообщения <> Неопределено Тогда
РазмерБуфера = Число(РазмерСообщения);
Иначе
РазмерБуфера = 1024;
КонецЕсли;
Тело = Новый БуферДвоичныхДанных(0);
Буфер = Новый БуферДвоичныхДанных(РазмерБуфера);
Поток = Сообщение.ПолучитьТелоКакПоток();
Пока Истина Цикл
Прочитано = Поток.Прочитать(Буфер, 0, РазмерБуфера);
Если Прочитано > 0 Тогда
Тело = Тело.Соединить(Буфер);
КонецЕсли;
Если Прочитано < РазмерБуфера Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Отчет = ПолучитьСтрокуИзБуфераДвоичныхДанных(Тело);
ПисьмоОбъект = Справочники.ВходящиеПисьма.СоздатьЭлемент();
ПисьмоОбъект.Наименование = "Письмо от Кролика";
ПисьмоОбъект.Дата = ТекущаяДата();
ПисьмоОбъект.ПочтовыйЯщик = "POP3";
ПисьмоОбъект.ВидСодержимого = Перечисления.ВидСодержимогоВходящегоПисьма.HTML;
ПисьмоОбъект.УстановитьСсылкуНового(Справочники.ВходящиеПисьма.ПолучитьСсылку());
ПисьмоОбъект.Текст = "\n" + СтрЗаменить(СтрЗаменить(Отчет, Символ(0), ""), Символы.ПС, "\n") + "\n";
НЗ = РегистрыСведений.СостояниеВходящихПисем.СоздатьНаборЗаписей();
НЗ.Отбор.Письмо.Установить(ПисьмоОбъект.ПолучитьСсылкуНового());
Запись = НЗ.Добавить();
Запись.Письмо = ПисьмоОбъект.ПолучитьСсылкуНового();
Запись.Прочитано = Ложь;
НЗ.Записать();
ПисьмоОбъект.Записать();
КонецПроцедурыСохраните изменения, нажав Ctrl + S.
-
Создайте регламентное задание с именем СервисыИнтеграции. Для этого правой кнопкой мыши нажмите на Регламентные задание в панели Навигатор и выберите Создать ⟶ Регламентное задание:
-
Заполните поле Имя и нажмите Готово:
-
Откроется окно редактора. Поставьте галочкуПредопределенное. В поле Имя метода нажмите на значок лупы и в открывшемся списке выберите уже имеющийся обработчик СервисыИнтеграцииСервер. Нажмите ОК:
-
Откроется окно редактора модуля обработчика. Проверьте, что в этом модуле обработчик регламентного задания содержит код:
Процедура ВыполнениеОбработкиСервисовИнтеграции() Экспорт
СервисыИнтеграции.ВыполнитьОбработку();
КонецПроцедурыСохраните изменения, нажав Ctrl + S.
Если вы вдруг закрыли этот модуль и вам необходимо его вновь открыть, то просто из окна Навигатор перейдите во вкладку Общие модули ⟶ СервисыИнтеграцииСервер.
-
Теперь следует задать расписание, по которому будет исполняться регламентное задание. Переключитесь в окно редактора регламентного задания СервисыИнтеграции. Затем, перейдите во вкладку Расписание ⟶ Общее и установите Повторять каждые: 1 дн.:
-
Во вкладке Дневное задайте расписание задания Повторять через: 5 секунд:
Сохраните изменения, нажав Ctrl + S.
Настройка конфигурации завершена. Теперь следует обновить конфигурацию информационной базы на ту конфигурацию, которую мы создали в проекте.
-
Откройте панель Информационные базы (Окно ⟶ Показать панель ⟶ Информационные базы):
-
Найдите в списке информационных баз ту, в которой необходимо обновить конфигурацию (в примере - БазаОфисОбменСКроликом). Нажмите на нее правой кнопкой мыши и выберите Обновить конфигурацию...:
-
В открывшемся окне убедитесь, что выбран необходимый проект и нужная информационная база. Нажмите Готово:
-
Откроется окно с сообщением о том, что будет выполнена реструктуризация базы данных, нажмите Принять:
Теперь конфигурация информационной базы Офис соответствует той, которую мы создали в проекте.
Подключение информационных баз «1С:Предприятия 8» к серверу
Вы настроили конфигурации БазаОфисОбменСКроликом так, что она готова к взаимодействию с использованием сервера «1С:Шины». Непосредственное подключение информационной базы «1С:Предприятия» к конкретному серверу выполняется уже в режиме «1С:Предприятие».
-
Запустите информационную базу БазаОфисОбменСКроликом от имени пользователя с административными правами и откройте Функции для технического специалиста...:
Если данная опция не отображается, то вам следует вначале включить Режим технического специалиста:
-
Для этого кликните на символ выпадающего списка в правом верхнем углу и перейдите в раздел Настройки ⟶ Параметры...:
-
Установите флажок рядом с параметром Режим технического специалиста. Нажмите Применить и закройте окно:
Теперь включите Функции для технического специалиста.
-
-
Разверните ветку Стандартные и откройте Управление сервисами интеграции:
-
В списке доступных сервисов интеграции вы увидите единственную запись Обмен с кроликом — этот тот самый сервис интеграции, который вы создали в «1C:EDT». Чтобы настроить подключение к серверу «1С:Шины», нажмите правой кнопкой мыши на сервис и выберите Редактировать:
-
В группе Настройки внешнего сервиса интеграции задайте свойства:
- Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Офис в приложении «1С:Шины».
- Пароль пользователя — секрет ключа. Нажмите ОК:
-
Поставьте флажок рядом с записью и закройте окно:
На этом создание примера закончено, можно приступать к тестированию обмена сообщениями.
Тестирование обмена сообщениями
-
Откройте панель управления брокером сообщений RabbitMQ. Перейдите на вкладку Queues, затем кликните на очередь TestChannel1C:
-
Перейдите в раздел Publish message. Заполнить поле Headers и Payload и нажмите кнопку Publish message, чтобы отправить сообщение:
-
Проверьте, что в панели управления «1С:Шины» увеличилось количество входящих и исходящих сообщений:
-
Откройте базу БазаОфисОбменСКроликом и перейдите Предприятие ⟶ Входящие письма. Вы увидите сообщение от RabbitMQ:
На этом пример по отправке сообщения из стороннего брокера сообщений RabbitMQ в базу, работающую на платформе «1С:Предприятие», через «1С:Шина» завершен.