WebSTOMP для RabbitMQ

06.03.26

Интеграция - WEB-интеграция

Конфигурация демонстрирует обмен 1С с брокером сообщений RabbitMQ через WebSocket по протоколу STOMP.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
WebSTOMP для RabbitMQ
.cf 106,52Kb
1 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Ранее здесь уже была статья по этой теме, но данный пример более структурированный и развернутый.
Проект распространяется свободно на gitverse (https://gitverse.ru/gazalievtimur/1CRMQWebSocket)

Для написания кода ИИ не использовался, но документация сгенерирована GLM-4.

 

1CRMQWebSocket — Интеграция 1С:Предприятие с RabbitMQ через WebSocket

 

Описание проекта

 

**1CRMQWebSocket** — это библиотека/расширение конфигурации для платформы 1С:Предприятие, обеспечивающая двусторонний обмен сообщениями с брокером сообщений RabbitMQ через WebSocket с использованием протокола STOMP 1.0.

 

Назначение

 

Библиотека предназначена для организации асинхронной интеграции 1С:Предприятие с внешними системами через брокер сообщений RabbitMQ. Решение позволяет:

 

- Отправлять сообщения из 1С в очереди RabbitMQ

- Получать сообщения из очередей RabbitMQ в 1С

- Отслеживать статусы отправки сообщений

- Управлять множественными подключениями к различным брокерам RabbitMQ

 

Возможности

 

| Возможность | Описание |

|-------------|----------|

| **Отправка сообщений** | Отправка сообщений в очереди RabbitMQ через WebSocket |

| **Получение сообщений** | Получение сообщений из очередей RabbitMQ |

| **Отслеживание статусов** | Отслеживание статусов отправки сообщений (Ожидание, Отправлено, Ошибка) |

| **Протокол STOMP 1.0** | Полноценная реализация протокола STOMP 1.0 |

| **Heartbeat** | Поддержка пульсации соединения для контроля активности |

| **ACK** | Подтверждение получения сообщений |

| **Заголовки STOMP** | Хранение всех заголовков STOMP сообщений |

| **Множественные подключения** | Поддержка нескольких подключений к различным брокерам RabbitMQ |

 

---

 

Требования

 

| Компонент | Версия/Требование |

|-----------|-------------------|

| **1С:Предприятие** | 8.3.27 или выше |

| **RabbitMQ** | С включённым WebSocket плагином |

| **RabbitMQ Management Plugin** | Для настройки через веб-интерфейс |

 

---

 

Установка

 

1. Скопируйте файлы из каталога `cf/` в вашу конфигурацию 1С:Предприятие

2. Импортируйте объекты конфигурации через Конфигуратор

3. Создайте элементы в справочнике `ПараметрыRMQ` для настройки подключений

4. Запустите регламентное задание `СозданиеПодключений` для установления соединений

 

Настройка RabbitMQ

 

Для работы библиотеки необходимо включить WebSocket плагин RabbitMQ:

 

```bash

rabbitmq-plugins enable rabbitmq_web_stomp

```

 

---

 

Основные элементы для использования

 

Справочники

 

ПараметрыRMQ

Справочник для хранения параметров подключения к RabbitMQ. Позволяет настроить несколько подключений к различным брокерам.

 

| Реквизит | Описание | Пример значения |

|----------|----------|-----------------|

| `Наименование` | Имя подключения (используется как ключ) | `RabbitMQ_Prod` |

| `Сервер` | Адрес сервера RabbitMQ | `localhost` |

| `Порт` | Порт WebSocket | `15674` |

| `Пользователь` | Логин RabbitMQ | `guest` |

| `Пароль` | Пароль пользователя | `guest` |

| `ВиртуальныйХост` | Виртуальный хост RabbitMQ | `/` |

| `ОчередьСообщений` | Имя очереди для чтения | `my_queue` |

| `ТочкаОбмена` | Exchange для отправки | `amq.direct` |

| `Таймаут` | Таймаут соединения | `60` |

| `ЧастотаПульса` | Интервал heartbeat в миллисекундах | `60000` |

 

ИсходящиеСообщенияRMQ

Справочник для хранения исходящих сообщений для отправки в RabbitMQ. Содержит:

- Тело сообщения

- Точку обмена (Exchange)

- Ключ маршрутизации

- Заголовки STOMP

 

ВходящиеСообщенияRMQ

Справочник для хранения входящих сообщений из RabbitMQ. Содержит:

- Тело сообщения

- Все заголовки STOMP

- Дату загрузки

 

Регистры сведений

 

СтатусыИсходящихСообщенийRMQ

Регистр для отслеживания статусов отправки сообщений. Поддерживает статусы:

- Ожидание

- Отправлено

- Ошибка

 

Перечисления

 

СтатусыОтправкиСообщенийRMQ

Перечисление с возможными статусами отправки сообщений:

- Ожидание

- Отправлено

- Ошибка

 

Регламентные задания

 

СозданиеПодключений

Регламентное задание для создания и поддержания WebSocket подключений к RabbitMQ. Выполняется по расписанию.

 

Общие модули

 

RMQWSStomp

Основной модуль, реализующий протокол STOMP. Содержит функции для парсинга и формирования STOMP кадров.

 

**Основные функции:**

- `ПолучитьСтруктуруСообщения(Данные)` — разбор строки данных протокола STOMP

- `Соединение(ПараметрыRMQ)` — формирование кадра для соединения с RabbitMQ

- `ПодписатьсяНаОчередь(Очередь, ID)` — подписка на очередь

- `ИсходящееСообщение(Параметры)` — формирование исходящего сообщения

- `ПодтвердитьПолучение(ID, Подписка)` — подтверждение получения сообщения (ACK)

 

#### RMQWSStompСоединение

Модуль для управления параметрами подключения и соединениями.

 

RMQWSStompСервер

Модуль с обработчиками событий WebSocket-сервера. Содержит функции:

- `ОбработчикПолученияСообщения` — обработка входящих сообщений

- `ОтправитьИсходящиеСообщения` — отправка исходящих сообщений

- `ЗаписатьПодтверждениеОтправки` — запись подтверждения отправки

 

RMQWSStompРегламент

Вспомогательный модуль для регламентных заданий. Содержит функции:

- `СоздатьПодключения` — создание подключений на основе справочника ПараметрыRMQ

- `УстановитьСоединение` — установление WebSocket соединения

 

Подсистемы

 

#### RMQWSStomp

Подсистема, объединяющая все объекты конфигурации, связанные с интеграцией RabbitMQ.

 

Архитектура

 

```

^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;

^74;                    1C:Предприятие                            ^74;

^74;                                                              ^74;

^74;  ^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;    ^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;              ^74;

^74;  ^74; Исходящие        ^74;    ^74; Входящие         ^74;              ^74;

^74;  ^74; СообщенияRMQ     ^74;    ^74; СообщенияRMQ     ^74;              ^74;

^74;  ^92;^72;^72;^72;^72;^72;^72;^72;^72;_16;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;    ^92;^72;^72;^72;^72;^72;^72;^72;^72;_16;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;              ^74;

^74;           ^74;                       ^74;                         ^74;

^74;           `60;                       `60;                         ^74;

^74;  ^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;             ^74;

^74;  ^74;         RMQWSStomp (STOMP протокол)       ^74;             ^74;

^74;  ^92;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;_16;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;             ^74;

^74;                     ^74;                                      ^74;

^74;  ^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;_24;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;             ^74;

^74;  ^74;         RMQWSStompСоединение            ^74;             ^74;

^74;  ^92;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;_16;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;             ^74;

^74;                     ^74;                                      ^74;

^74;  ^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;`60;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;             ^74;

^74;  ^74;         WebSocket Клиенты                 ^74;             ^74;

^74;  ^92;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;_16;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;             ^74;

^74;                     ^74;                                      ^74;

^92;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;_32;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;

                      ^74;

                      ^74; WebSocket (ws://)

                      ^74;

^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;_32;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;

^74;                     ^74;         RabbitMQ                      ^74;

^74;  ^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;`60;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;             ^74;

^74;  ^74;         WebSocket STOMP Plugin            ^74;             ^74;

^74;  ^92;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;_16;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;             ^74;

^74;                     ^74;                                      ^74;

^74;  ^84;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;`60;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^88;             ^74;

^74;  ^74;         Очереди / Exchange                ^74;             ^74;

^74;  ^92;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;             ^74;

^92;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^72;^96;

```

Использование

Для работы обмена требуется настроить параметры подключения RMQ в справочнике "ПараметрыRMQ"
Если в параметрах указана очередь входящих сообщений, то при подключении будет оформлена подписка на эту очередь и сообщения будут сохраняться в справочник входящих сообщений.

Для отправки необходимо создать исходящее сообщение в справочнике "ИсходящиеСообщенияRMQ".

Соединения автоматически создаются регламентным заданием "СозданиеПодключений". Далее при установке подключения автоматически происходит подписка на очередь входящих и отправка сообщений.

 

Разработка и тестирования проведены на платформе 1С:Предприятие 8.3 (8.3.27.1786). Версия для разработчиков.

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия КОРП, редакция 3.0, релизы 3.0.193.19

Вступайте в нашу телеграмм-группу Инфостарт

RabbitMQ websocket

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    23562    35    24    

27

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Расширение для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

24000 руб.

02.02.2021    22260    67    52    

42

WEB-интеграция Загрузка и выгрузка в Excel Программист Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Расширение освободит вас от необходимости вручную обновлять товары в группах ВКонтакте. Достаточно задать правила один раз, и система автоматически синхронизирует ваш каталог. Вы сможете легко выбирать, какие товары публиковать, создавая гибкие критерии отбора. Например, можно добавить важные для покупателей параметры: цвет, размер или другие характеристики.

12200 руб.

29.08.2025    1984    6    0    

7

WEB-интеграция Программист Бизнес-аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    5592    24    4    

26
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ksnik 638 06.03.26 13:33 Сейчас в теме
Здравствуйте. В цикле Пока Выборка.Следующий() отправляет сообщения по одному. Если в очереди на отправку скопилось 1000 сообщений, они будут отправляться последовательно. Это может надолго заблокировать обработку входящих сообщений. Не думали чередовать процесс отправки с получением? Можете прокомментировать возможность разделения приема и обработки, пакетность и переход на STOMP 1.2?
2. gybson 2 06.03.26 13:38 Сейчас в теме
(1) Согласен, что некрасиво, но универсального красивого решения пока не пришло в голову.

Но! Я изначально исходил из того, что входящее и исходящее соединение будут разделены. Т.е. в одной настройке вы можете указать очередь, а в другой точку обмена и тогда отправка и получения пойдут по разным соединениям.
Для отправки сообщения требуется регистрация/авторизация