1С:Шина
25.05.2022
Настройка обмена сообщениями между базой на платформе "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С:Шины", создав приложение.
- Откройте панель управления сервера.
- Нажмите Приложения > + Новое приложение.
- Убедитесь, что выбраны варианты Из проекта и Новый проект.
- Задайте имя проекта — Пример №4 и нажмите Tab. "1С:Шина" заполнит остальные поля и включит режим разработки для создаваемого приложения.
- Выберите тип СУБД (в примере это будет Microsoft SQL Server) и нажмите Создать.
- Новое приложение появится в списке со статусом Создается. Через некоторое время статус приложения изменится на Работает.
- Чтобы открыть проект в среде разработки, нажмите Редактировать... в конце строки.
- "1С:Шина" откроет новую вкладку браузера для среды разработки и запросит пароль. Введите пароль администратора, который вы указали при установке сервера, и нажмите Войти.
"1С:Шина" подготовит рабочую область, построит проект и откроет его в среде разработки.
- Добавьте новый элемент проекта — Процесс интеграции. Для этого в представлении 1C:PROJECT EXPLORER нажмите New > Project Element в контекстном меню подсистемы Основная.
- Задайте имя создаваемого элемента — ОбменСКроликом — и нажмите Ввод.
"1С:Шина" создаст в проекте новый процесс интеграции и откроет редактор для создания его схемы.
- Используя палитру узлов, нарисуйте следующую схему:

- Создайте параметры интеграционных процессов:
- ChannelName – название очереди сообщений в RabbitMQ;
- Host – адрес сервера, где располагается RabbitMQ;
- Login – логин для RabbitMQ;
- Password – пароль для RabbitMQ.
- Заполните созданными параметрами настройки Источника RabbitMqИсточник.

- Чтобы опубликовать проект на сервере, нажмите F9.
- За ходом обновления проекта вы можете наблюдать в левом углу строки состояния среды разработки. Статус updating изменится на статус running. Это говорит о том, что приложение было обновлено и запущено заново.
- Откройте опубликованное приложение, нажав на контекстное меню процесса ОбменСКроликом, и выбрав Open Application.
- После успешной авторизации вы увидите приложение, а в нем список процессов интеграции, существующих в приложении. В примере это будет единственный процесс интеграции ОбменСКроликом.

Настройка приложения в панели управления "1С:Шины"
- Нажмите Инфосистемы > + Добавить систему.
- Задайте код системы — office и наименование — Офис. Нажмите Добавить.
- Теперь для информационной системы нужно получить ключ, который она будет использовать при подключении к серверу 1С:Шины.
- Чтобы получить ключ, нажмите на информационную систему, а затем нажмите Выдать ключ API.

- Скопируйте и сохраните идентификатор ключа и секрет клиента. Позднее вы будете использовать его при подключении информационной базы к серверу "1С:Шины".
- Перейдите на вкладку Процессы и нажмите на процесс Основной::ОбменСКроликом.
- Вы увидите схему процесса интеграции и панель, позволяющую задавать свойства узлов этой схемы. В схеме выберите группу ГруппаУчастников, а затем нажмите Состав группы в правом нижнем углу.
- Вы увидите список информационных систем, входящих в группу. Сейчас в группе нет ни одной информационной системы.
- Установите флажок у информационной системы office и нажмите Добавить в группу.

- После этого закройте окно Состав группы ГруппаУчастников.
Далее необходимо заполнить параметры у узла RabbitMqИсточник, которые позволят взаимодействовать "1С:Шине" с брокером RabbitMQ.
- На схеме выберите узел RabbitMqИсточник и в правом нижнем углу нажмите Параметры.
- Заполните параметры следующим образом:
- ChannelName – заполните TestChannel1C;
- Host – адрес сервера, где располагается RabbitMQ;
- Login – логин для RabbitMQ;
- Password – пароль для RabbitMQ;
- Нажмите внизу справа Применить, а потом сверху справа Запустить, чтобы запустить процесс интеграции.
Настройка информационной базы "1С:Предприятия"
В информационной базе Офис вы создадите объект конфигурации Сервис интеграции, взаимодействующий с севером "1С:Шины". Под управлением этого сервиса интеграции будет работать один канал. По каналу ОбменСКроликом сообщения от RabbitMQ будут поступать в базу Офис.
В комплект поставки 1С:Шины включены шаблоны конфигураций Офис (office_template.cf) и Магазин (shop_template.cf).
- Создайте пустую информационную базу, используя конфигурацию office_template.
- Запустите конфигуратор информационной базы Офис.
- Добавьте сервис интеграции с именем ОбменСКроликом.
- Нажмите Действия – Загрузить каналы.
- Заполните Адрес сервиса – это адрес вашего приложения из панели управления "1С:Шиной", Пользователь и Пароль – это ключ API, полученный входе создания Инфосистемы.
- Нажмите Получить каналы сервиса, а затем Загрузить.

После этого перед вами откроется окно обработчика получения сообщения канала Основной_ОбменСКроликом_Канал1СНазначение
- Напишите код обработчика Основной_ОбменСКроликом_Канал1СНазначение:
Копировать в буфер обменаПроцедура Основной_ОбменСКроликом_Канал1СНазначениеОбработкаПолученияСообщения(Сообщение, Отказ)
// Вставить содержимое обработчика.
РазмерСообщения = Сообщение.Параметры.Получить("РазмерСообщения");
Если РазмерСообщения <> Неопределено Тогда
РазмерБуфера = Число(РазмерСообщения);
Иначе
РазмерБуфера = 1024;
КонецЕсли;
Тело = Новый БуферДвоичныхДанных(0);
Буфер = Новый БуферДвоичныхДанных(РазмерБуфера);
Поток = Сообщение.ПолучитьТелоКакПоток();
Пока Истина Цикл
Прочитано = Поток.Прочитать(Буфер, 0, РазмерБуфера);
Если Прочитано > 0 Тогда
Тело = Тело.Соединить(Буфер);
КонецЕсли;
Если Прочитано < РазмерБуфера Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Отчет = ПолучитьСтрокуИзБуфераДвоичныхДанных(Тело);
ПисьмоОбъект = Справочники.ВходящиеПисьма.СоздатьЭлемент();
ПисьмоОбъект.Наименование = "Письмо от Кролика";
ПисьмоОбъект.Дата = ТекущаяДата();
ПисьмоОбъект.ПочтовыйЯщик = "POP3";
ПисьмоОбъект.ВидСодержимого = Перечисления.ВидСодержимогоВходящегоПисьма.HTML;
ПисьмоОбъект.УстановитьСсылкуНового(Справочники.ВходящиеПисьма.ПолучитьСсылку());
ПисьмоОбъект.Текст = "
+ СтрЗаменить(СтрЗаменить(Отчет,
Символ(0),
""), Символы.ПС,
"
") + "
"; НЗ =
РегистрыСведений.СостояниеВходящихПисем.СоздатьНаборЗаписей();
НЗ.Отбор.Письмо.Установить(ПисьмоОбъект.ПолучитьСсылкуНового());
Запись = НЗ.Добавить();
Запись.Письмо = ПисьмоОбъект.ПолучитьСсылкуНового();
Запись.Прочитано =
Ложь; НЗ.Записать();
ПисьмоОбъект.Записать();
КонецПроцедуры
Создайте регламентное задание с именем СервисыИнтеграции.
- Выберите уже имеющийся обработчик СервисыИнтеграцииСервер для регламентного задания.
- Проверьте, что в этом модуле обработчик регламентного задания содержит код:
Копировать в буфер обменаПроцедура ВыполнениеОбработкиСервисовИнтеграции() Экспорт
СервисыИнтеграции.ВыполнитьОбработку();
КонецПроцедуры
- Установите флажки Использование и Предопределенное, чтобы задание в информационной базе создалось автоматически;
- Нажмите Расписание - Открыть и задайте расписание задания — каждый день; каждые 5 секунд.

- Обновите конфигурацию базы данных.
Подключение информационных баз 1С:Предприятия 8 к серверу "1С:Шины"
Вы настроили конфигурации Офис так, что она готова к взаимодействию с использованием сервера "1С:Шины". Непосредственное подключение информационной базы 1С:Предприятия к конкретному серверу выполняется уже в режиме "1С:Предприятие".
- Запустите информационную базу Офис от имени пользователя с административными правами и откройте Функции для технического специалиста:

- Разверните ветку Стандартные и откройте Управление сервисами интеграции:

В списке доступных сервисов интеграции вы увидите единственную запись Обмен с кроликом — этот тот самый сервис интеграции, который вы создали в Конфигураторе.
- Чтобы настроить подключение к серверу "1С:Шины"нажмите Редактировать.
- В группе Настройки внешнего сервиса интеграции задайте свойства:
- Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Офис в приложении "1С:Шины".
- Пароль пользователя — секрет ключа.

- Нажмите ОК для сохранения настроек.
- Чтобы запустить обмен сообщениями нажмите Установить активность. В результате будет установлен флаг Активность у выбранного сервиса:

На этом создание примера закончено, можно приступать к тестированию обмена сообщениями.
- Откройте панель управления брокером сообщений RabbitMQ и перейдите на вкладку Queues.
- Заполните раздел Publish message и нажмите кнопку Publish message, чтобы отправить сообщение.

- Проверьте, что в панели управления "1С:Шины" увеличилось количество входящих и исходящих сообщений.

- Откройте базу Офис и перейдите Предприятие – Входящие письма и увидите сообщение от RabbitMQ


На этом пример по отправке сообщения из стороннего брокера сообщений RabbitMQ в базу, работающую на платформе "1С:Предприятие", через "1С:Шину" завершён.