Пример 2. Настройка обмена сообщениями между базой на платформе «1С:Предприятие» и брокером сообщений RabbitMQ с использованием «1С:Шины»
«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С:Шины», создав приложение.
- Откройте панель управления;
- Нажмите ;
- Убедитесь, что выбраны варианты Из проекта и Новый проект;
- Задайте имя проекта — ПримерИнтеграцииСRabbitMQ и нажмите Tab. "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. Это говорит о том, что приложение было обновлено и запущено заново;
- Откройте опубликованное приложение. Для этого нажмите на имя приложения в строке состояния слева. В открывшемся меню выберите Открыть приложение...
- Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера;
- После успешной авторизации вы увидите приложение, а в нем — список процессов интеграции, существующих в приложении. В примере это будет единственный процесс интеграции ОбменСКроликом;
Настройка приложения в панели управления «1С:Шины»
- Откройте приложение, если вдруг оно у вас закрыто;
- Нажмите ;
- Задайте код системы — 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С:Предприятия» к конкретному серверу выполняется уже в режиме «1С:Предприятие».
- Запустите информационную базу БазаОфисОбменСКроликом от
имени пользователя с административными правами и откройте Функции для
технического специалиста...;Если данная опция не отображается, то вам следует вначале включить Режим технического специалиста:
- Для этого кликните на символ выпадающего списка в правом верхнем углу и перейдите в раздел
- Установите флажок рядом с параметром Режим технического
специалиста. Нажмите
Применить и закройте окно;
Теперь включите Функции для технического специалиста.
- Разверните ветку Стандартные и откройте Управление сервисами интеграции;
- В списке доступных сервисов интеграции вы увидите единственную запись Обмен с кроликом — этот тот самый сервис интеграции, который вы создали в «1C:EDT». Чтобы настроить подключение к серверу «1С:Шины», нажмите правой кнопкой мыши на сервис и выберите Редактировать;
- В группе Настройки внешнего сервиса интеграции задайте
свойства:
- Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Офис в приложении «1С:Шины».
- Пароль пользователя — секрет ключа.
Нажмите ОК;
- Поставьте флажок рядом с записью и закройте окно.
На этом создание примера закончено, можно приступать к тестированию обмена сообщениями.
Тестирование обмена сообщениями
- Откройте панель управления брокером сообщений RabbitMQ. Перейдите на вкладку Queues, затем кликните на очередь TestChannel1C.
- Перейдите в раздел Publish message. Заполнить поле Headers и Payload и нажмите кнопку Publish message, чтобы отправить сообщение;
- Проверьте, что в панели управления «1С:Шины» увеличилось количество входящих и исходящих сообщений.
- Откройте базу БазаОфисОбменСКроликом и перейдите . Вы увидите сообщение от RabbitMQ
На этом пример по отправке сообщения из стороннего брокера сообщений RabbitMQ в базу, работающую на платформе «1С:Предприятие», через «1С:Шину» завершён.