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

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

См. также