|

RabbitMQ как брокер сообщений для 1С: тот момент, когда это нужно


Содержание:

  1. Что такое брокер сообщений
  2. Когда RabbitMQ очереди может быть избыточен

В современной ИТ-архитектуре предприятия системы 1С редко существуют сами по себе. Они постоянно взаимодействуют с веб-сайтами, CRM, мобильными приложениями, складскими системами и множеством других сервисов, написанных на разных языках программирования. Эта интеграция ставит вопросы: как обеспечить надежность обмена, не перегрузить основные системы и сохранить их отзывчивость? Одним из стандартных и наиболее эффективных решений этой задачи является использование брокера сообщений, и RabbitMQ — один из самых популярных представителей этого класса программного обеспечения.

Что такое брокер сообщений

Брокер сообщений — это программа-посредник для приложений. Одни программы отправляют в него сообщения, не зная о том, кто и когда их получит. Другие программы подписываются на получение этих сообщений и забирают их из очереди по мере готовности.

Ключевая идея — отсутствие прямой связи между отправителем и получателем. Они не знают о существовании друг друга, они оба знают только о брокере. Это и называется слабой связанностью или “декаплингом” систем. В то время как простейшие посредники, вроде общей папки на сервере или FTP, тоже могут передавать данные, полноценный брокер, как RabbitMQ, берет на себя более сложные функции: гарантирует доставку, управляет очередностью, маршрутизирует сообщения и подтверждает их получение.

RabbitMQ

Зачем и когда 1С нужен RabbitMQ:

Использование RabbitMQ решает несколько фундаментальных проблем, с которыми сталкиваются разработчики 1С.

1. Асинхронное выполнение тяжелых задач.

Проблема: Пользователь запускает операцию, которая требует значительного времени: формирование сложного аналитического отчета, массовая рассылка электронных писем, выгрузка большого объема данных в другую систему. В синхронном режиме интерфейс пользователя “зависает” до тех пор, пока задача не будет выполнена. Это парализует работу и вызывает недовольство.

Решение с RabbitMQ: Система 1С не выполняет задачу сама. Вместо этого она формирует сообщение и отправляет его в очередь RabbitMQ. Это занимает доли секунды, после чего интерфейс пользователя снова свободен. В это время один или несколько независимых сервисов-обработчиков (consumers), которые могут быть написаны не на 1С, забирают это сообщение из очереди и начинают выполнять тяжелую задачу в фоновом режиме. После выполнения они могут таким же образом отправить ответное сообщение о готовности.

Такой вариант использования брокера сообщений подходит в том случае, если и производитель и потребитель – информационные системы.

2. Гарантированная и надежная интеграция между системами.

Проблема: Происходит обмен данными между 1С и, например, интернет-магазином через HTTP-сервисы. Если в момент отправки заказа с сайта система 1С недоступна (перезагрузка сервера, обновление), то данные о заказе будут потеряны, если на стороне сайта не реализована логика повторных отправок.

Решение с RabbitMQ: Сайт отправляет сообщение о новом заказе не напрямую в 1С, а в очередь RabbitMQ. Брокер сохраняет это сообщение у себя. Как только система 1С становится доступной, она подключается к очереди и забирает все накопившиеся заказы. RabbitMQ, при правильной настройке, не удалит сообщение из очереди до тех пор, пока 1С явно не подтвердит, что успешно обработала его (механизм ack – acknowledgement). Это гарантирует, что ни один заказ не потеряется даже при временных сбоях.

3. Построение слабосвязанной архитектуры (декаплинг).

Проблема: В компании есть 1С, CRM-система и WMS (система управления складом). При создании нового контрагента в 1С нужно, чтобы он появился и в CRM, и в WMS. При прямой интеграции код 1С должен будет содержать эндпоинты и логику вызова обеих систем. Если завтра добавится четвертая система, придется снова изменять код 1С. Если одна из систем-получателей будет недоступна, вся операция в 1С может завершиться ошибкой.

Решение с RabbitMQ: 1С просто публикует одно сообщение “Создан новый контрагент” с его данными в RabbitMQ. А уже CRM, WMS и любые другие заинтересованные системы подписываются на это событие и забирают сообщение. 1С не знает, сколько систем и каких именно его слушают. Это позволяет гибко добавлять и убирать компоненты в ИТ-структуру, не трогая при этом ядро.

4. Распределение и масштабирование нагрузки.

Проблема: Система 1С должна обрабатывать большой поток однотипных операций. Например, получать данные с тысяч кассовых аппаратов или датчиков IoT. Одна база 1С физически не справляется с пиковой нагрузкой.

Решение с RabbitMQ: Все данные поступают в одну очередь RabbitMQ. Забирать сообщения из этой очереди могут несколько параллельно работающих обработчиков (consumers). Это могут быть несколько фоновых заданий в 1С или, что более эффективно, несколько экземпляров внешнего сервиса. RabbitMQ сам распределит сообщения между ними. Если нагрузка растет, можно просто запустить больше экземпляров обработчиков, тем самым горизонтально масштабируя систему.

Плохая практика: самодельные очереди.

Часто для решения похожих задач в 1С создают “самодельные” очереди на базе регистров сведений (“ОчередьСообщенийОбмена”). На небольших объемах это может работать, но с ростом интенсивности обмена такая таблица в базе данных разрастается, запросы к ней замедляют всю систему, а управление такой очередью требует постоянного внимания и доработок (архивация, очистка и т.д.). RabbitMQ — это специализированный, высокопроизводительный инструмент, созданный именно для этих задач, и он лишен этих недостатков.

Когда RabbitMQ очереди может быть избыточен

Несмотря на все преимущества, RabbitMQ не является универсальным решением на все случаи жизни.

  • Для синхронных операций: Если вам нужно отправить запрос и немедленно получить ответ (например, проверить остаток товара на складе перед добавлением в корзину), асинхронная модель с очередями не подходит. Здесь лучше использовать прямые вызовы через HTTP/REST.
  • Для очень простых интеграций: Если вам нужно раз в сутки выгружать один файл между двумя системами, настройка полноценного брокера может быть излишней сложностью.
  • В полностью гомогенной среде 1С: Для обмена данными между двумя базами 1С существуют встроенные механизмы (планы обмена), которые могут быть проще в настройке, если не требуются гибкость и надежность, которые дает брокер.

RabbitMQ — это мощный инструмент, который переносит в мир 1С проверенные временем архитектурные паттерны из мира больших распределенных систем.[1][2] Он необходим, когда вы сталкиваетесь с задачами асинхронной обработки, необходимостью гарантированной доставки данных, интеграцией с разнородными системами и проблемами масштабирования. Переход от прямых связей к событийной модели через брокер сообщений делает ИТ-архитектуру предприятия более гибкой, надежной и готовой к будущим изменениям.

Специалист компании ООО “Кодерлайн”,

Астанов Артём


Помогла ли вам статья? Оставьте свой комментарий:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Блог про 1С:Предприятие

Copyright © 2024 TopKoder

Мы занимаемся внедрением и обслуживанием программных продуктов 1С.