Взаимодействие 1С со сторонними продуктами посредством REST и Golang (middleware). Часть 1 - RabbitMQ

18.06.21

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

Часто 1С не может взаимодействовать со сторонними продуктами, например для шины предприятия RabbitMQ создают внешние компоненты. В статье предлагается новомодный подход REST API реализованный на приложении прокладке Middleware, язык тоже трендовый Golang. В статье немного познакомлю Вас с языком Golang, опишу интеграцию на стороне 1С (8.3.16.1502). Если статья зайдет, напишу как выгружать журнал регистрации по этой схеме в ElasticSearch

Скачать файл

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

Наименование По подписке [?] Купить один файл
1С_Enterprise_Client
.epf 9,11Kb
23
23 Скачать (1 SM) Купить за 1 850 руб.

Предыдущие и будущие статьи:

Я не буду вдаваться в подробности установки RabbitMQ, в статье используется Docker контейнер с официального сайта для экспериментов, устанавливается просто:

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

В качестве модели данных будем использовать Клиента, с полями: ID, Name, Type и Email данную структуру мы будем забирать из шины и помещать в очередь. Данные будут переобразованны в JSON.

Для REST API создадим обработчик exchange_rabbitmq, который будет принимать GET и POST запросы.

В Golange есть хороший внутрненний пакет для работы с HTTP, который будет использован. Для взаимодействия с RabbitMQ будем использовать официальный пакет с сайта шины.

Для метода POST получает JSON строку с массивом структур, полученные данные помещаем в шину. Для метода GET получаем данные из шины и передаем их на сторону 1С.

В 1С создадим внешнюю обработку с таблицей, в которую для метода GET будут поступать записи, а для метода POST из таблицы данные будут поступать в шину, как уже говорилось ранее через JSON

Помещаем в шину

В шину пришло

Потребляем из шины

Шина пустая :)

Для middleware предусмотрена возможность сохранять настройки подключения к шине

В крации внутри middleware создается метод обрабатывающий запросы на адрес "/rabbitMQ_1C", в зависимости от метода происходит или отправка или потребление, для наглядности поазываю урезанную функцию

Внутри middleware разварачивается по сути небольшой веб-сервис обрабатывающий запросы, своего рода микросервис, в следующих статьях я расскажу как поместить его в Докер контейнр, а также разместить этот контейнер в Докер Хаб

Исходники я разместил на GitHub. Можете использовать исходник как шаблон, жду ваших идей и советов. Ни на что не претендую интересная тема, решил поделиться с сообществом своими наработками. Есть наработки по выгрузке журнала регистраций в ElasticSearch возможно дополню проект новым обработчиком для этого дела.

Адрес исходников GitHub https://github.com/dmitry-msk777/Connector_1C_Enterprise

ОБНОВЛЕНИЕ 28.09.2020

Для проекта написан HTTP-сервис в 1С платформе, подробней в Статье №5 этого цикла, он нужне чтобы корректно получать сообщения из RabbitMQ через канал как описанно в документации, а не через текущую реализацию с замедлением.

Golang RabbitMQ REST middleware

См. также

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

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

57600 руб.

26.11.2024    1231    1    1    

4

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    18352    20    22    

18

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20561    13    19    

18

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

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

14400 руб.

20.12.2024    318    2    0    

5

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    2466    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Cyberhawk 135 03.09.20 21:29 Сейчас в теме
Не очень понятно, про какую шину в статье постоянно идет речь
2. dmitry-irk38 137 03.09.20 23:21 Сейчас в теме
3. nixel 1440 22.09.20 11:48 Сейчас в теме
4. dmitry-irk38 137 22.09.20 12:42 Сейчас в теме
(3) Брокер сообщений? Он же связующее программное обеспечение, к которому относится и ESB. Я вот какой-то видимой разницы не увидел. Прошу изложить Ваше видение.
5. nixel 1440 22.09.20 12:44 Сейчас в теме
(4) в задачи шины входит трансформация сообщения под формат приемника, логирование статусов доставки сообщений до приемников, синхронизация, управление нси, часто рядом же заявочная система. а рэббит - да, просто брокер сообщений. транспорт.
6. dmitry-irk38 137 22.09.20 13:02 Сейчас в теме
(5) Значить RabbitMQ + Прослойка + мини-адаптер обработка на 1С - вот это все можно назвать шиной? Ну такой кустарной шиной 😊
7. artbear 1565 23.09.20 15:25 Сейчас в теме
(5) управление нси, часто рядом же заявочная система - это вроде уже перебор для шины.
в обычное определение шины этот набор не входит )
8. nixel 1440 23.09.20 15:49 Сейчас в теме
(7) как ты нормализацию данных будешь проводить без управления данными? :) или нормализация - тоже не задача для шины?
9. artbear 1565 23.09.20 17:58 Сейчас в теме
(8) про трансформацию данных в шине знаю. а что такое нормализация данных в данном контексте?
10. nixel 1440 23.09.20 17:59 Сейчас в теме
(9) установление соответствий между разными системами, обработка дублей и проч.
11. artbear 1565 23.09.20 18:39 Сейчас в теме
(10) ИМХО это не функция шины. НСИ сильно завязаны на предметную область, а шины более универсальны.
Lucechiaro; ivv1970; +2 Ответить
12. NoRazum 29 16.02.21 12:49 Сейчас в теме
Идея отличная.
Была бы 1с реалтай язык. не надо было делать таких велосипедов.
13. user1140274 16.04.21 15:54 Сейчас в теме
Коллеги, а как отлаживать http сервисы на Go?) Нажимаю в обработке Поместить в шину, в RabbitMQ ничего не попадает, поставил Goland IDE, на main.go точка останова останавливается, на handlers.go где идет обработка в func Rabbit_MQ не останавливается
Прикрепленные файлы:
14. dmitry-irk38 137 16.04.21 16:42 Сейчас в теме
(13) Если адреса, порты и ресурсы в URL указаны верно, то остановка произойдет на точке, которая на строке 90. Судя по скриншоту складывается ощущение, что приложение вообще не запущенно(в режиме отладки). Я пользуюсь обычно VS Studio
15. user1140274 20.04.21 09:52 Сейчас в теме
(14) Все получилось! Крутая публикация, получается достаточно универсальный инструмент интеграции
16. user907241 09.08.23 09:08 Сейчас в теме
Добрый день! Прошу автора пожалуйста подсказать.
Имеются две базы 1с. Есть потребность связать их с помощью вот этой прослойки. (если точнее то из одной всегда выгружаем какую то инфу, в другую всегда загружаем).
Если бы была вот такая задача "минимум", то можно ли было бы сократить количество сущностей, используемых в ваших статьях (помимо очевидных типа веб сервера)?

p.s. базы, которые будут POSTить - на мобилках.
17. dmitry-irk38 137 09.08.23 15:24 Сейчас в теме
(16) Да, просто исползовать две базы 1С передавая напрямую данные через HTTP-сервисы :)) В серии статей описываются специфичные коннекторы для RabbitMQ, Redis и т.п Также можно использовать бля больших данных, где нужна очередь и многоточность. Например я использовал решение для взаимодествия с 1500 базами 1С
18. user907241 09.08.23 15:46 Сейчас в теме
(17) Количество баз, которые выгружают инфу - тоже в тысячах. Напряму там, к сожалению, нет возможности, поэтому используется прокладка 1Совская на текущий момент, вот идея заменить 1совскую прокладку на golang с минимальным кол-вом новых сущностей. Думаю в сторону простенького сервиса на golang, который как раз заберет из источника инфу и сразу в базу приемник направит.
19. пользователь 09.08.23 15:55
Сообщение было скрыто модератором.
...
Оставьте свое сообщение