Как организовать обмен данными между 1С и IBM MQ в среде Linux?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе инфраструктуры 1С на ОС Linux многие разработчики сталкиваются с классической проблемой: отсутствие поддержки COM-объектов, которые привычно использовались в Windows для работы с внешними системами, в том числе с брокерами сообщений типа IBM MQ. В этой статье мы подробно разберем, как построить надежную интеграцию, не прибегая к нестабильным «костылям».

Почему не стоит пытаться использовать COM или Wine

Первое, что хочется сделать — это попытаться запустить 1С под управлением Wine или пробросить COM-объекты через специфические прослойки. Сразу предостережем вас от этого пути. Согласно официальным методическим указаниям фирмы 1С, использование COM-технологий в серверных решениях на базе Linux является крайне нестабильным. Это ведет к:

Решение 1: Микросервисная архитектура как индустриальный стандарт

Наиболее надежный и рекомендуемый способ взаимодействия 1С с IBM MQ на Linux — использование «прослойки» в виде микросервиса. Это внешнее приложение, написанное на языке, который нативно работает с IBM MQ (например, Go, Python или PHP), которое выступает посредником между 1С и очередью.

Почему это лучший выбор:

  1. Стабильность: Микросервис держит постоянное соединение с брокером, что избавляет 1С от нагрузки при инициализации сессии.
  2. Асинхронность: Ваша 1С не будет «зависать» в ожидании ответа от брокера, если сеть временно недоступна.
  3. Масштабируемость: Вы можете легко изменить логику обработки сообщений или добавить логирование без изменения конфигурации 1С.

Рассмотрим, как это выглядит на практике. 1С отправляет данные в микросервис через стандартный HTTPСервис или обычный HTTPЗапрос, а микросервис транслирует их в очередь MQ. Для Go, например, существует официальная библиотека IBM MQ, которая позволяет работать с очередями максимально эффективно.

Решение 2: Использование IBM MQ REST API

Если версия вашего IBM MQ позволяет, самым «чистым» решением является использование встроенного REST API. В этом случае вам даже не нужно писать свой микросервис.

Вы работаете с брокером как с обычным веб-сервисом. В 1С это реализуется через штатный объект HTTPСоединение:


// Пример упрощенной отправки сообщения через HTTP
Соединение = Новый HTTPСоединение("mq-server-host", 443, , , , 60, Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/ibmmq/rest/v1/messaging/qmgr/QM1/queue/Q1/message");
Запрос.УстановитьТелоИзСтроки(ДанныеСообщения);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Этот подход полностью соответствует архитектуре платформы и не требует установки специфических библиотек в систему, где работает сервер 1С.

Решение 3: Командная строка (для простых задач)

В исключительных случаях, если обмен данными происходит редко и объемы сообщений невелики, можно воспользоваться системными утилитами IBM MQ, такими как amqsput. Вызывать их из 1С можно через функцию ЗапуститьПриложение или КомандаСистемы.

Однако помните, что этот метод является самым примитивным. Он плохо обрабатывает ошибки и не подходит для высоконагруженных систем. Мы рекомендуем использовать его только как временное или аварийное решение.

Итоги и рекомендации

Для того чтобы ваша система работала стабильно в среде Linux, следуйте правилу: выносите сложную логику интеграции во внешние сервисы. Если вы программируете на 1С, используйте HTTP-запросы для общения с прослойкой или напрямую с REST API брокера. Это позволит вам избежать проблем с платформенной зависимостью и обеспечит легкость обновления конфигурации в будущем.

Помните, что архитектурные ограничения — это не препятствие, а повод использовать более современные и надежные инструменты интеграции.

← На главную