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