Ранее здесь уже была статья по этой теме, но данный пример более структурированный и развернутый.
Проект распространяется свободно на 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
Вступайте в нашу телеграмм-группу Инфостарт
