Rabbit MQ для 1С

19.10.23

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

Думаю, все уже слышали и не раз про брокер сообщений Rabbit MQ. Давайте разберёмся, что это за зверь и какую нишу он может занять в инфраструктуре 1С.

Прежде всего нужно разобраться, что такое «брокер сообщений». Википедия говорит:

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

Но если сказать простыми словами, брокер сообщения это сервис, который умеет принимать сообщения от клиента, хранить их и передавать их другому клиенту.

По сути, почтовый сервер также можно назвать брокером сообщений, и FTP сервер, и даже расшаренная папка на сервере может выступать посредником передачи сообщений.

Только когда в качестве брокера будет выступать такой примитивный сервис, как почтовый или FTP, то ряд вспомогательных функций — удаление сообщений после прочтения, определение очерёдности чтения, подтверждение получения сообщения и другие — будут ложиться на клиента. А полноценный брокер сообщений, например, Rabbit MQ все это берет на себя и предлагает ряд других возможностей, например, очередь и маршрутизацию.


Почему брокеры сообщений получили такое сильное распространение

На рынке есть много разных платформ, разработанных на разных языках программирования, и задача реализации обмена между разными системами достаточно сложная и затратная. По этой причине спрос создал потребность в сторонних сервисах, которые бы выступали посредниками и имели хорошо документированное API для реализации отправки и чтения сообщений. Я думаю, для всех более-менее известных языков программирования и фреймворков существуют готовые библиотеки для взаимодействия с Rabbit MQ. Разработчики по умолчанию выбирают этого брокера сообщений в своих проектах.


Как обстоит дело с Rabbit MQ в 1С

Есть 2 варианта:

  1. Использовать внешнюю Native API компоненту.
  2. Использовать HTTP API.

Особенности работы через HTTP API

Rabbit MQ хоть и имеет HTTP API, оно больше предназначено для администрирования сервиса, чем для обмена, имеет ряд ограничений (например, не поддерживает подтверждение принятия каждого сообщения ack) и работает достаточно медленно. В отзывах пишут, что бывают потери сообщений. Используют это решение мало, но есть примеры успешной реализации, например описанные здесь //infostart.ru/1c/tools/1731834/.

Из плюсов — простота реализации и отсутствие внешних компонент.

Для более продвинутого варианта остаётся только использовать внешние библиотеки. На данный момент мне известно 2 основных решения:

  1. PinkRabbitMQ от BIT:ERP, бесплатно доступна на GITHUB https://github.com/BITERP/PinkRabbitMQ
  2. Интеграция от Серебряной пули (платная) https://silverbulleters.org/rabbitmq
  3. Есть также разные решения, размещенные на Infostart, например, описанные в статье //infostart.ru/1c/tools/845345/.


Установка Rabbit MQ для тестирования обмена

Наверное, установка такой системы, как Rabbit MQ, могла быть нетривиальной задачей. Хотя, надо сказать, документация на сайте очень хорошая, хоть и англоязычная: https://www.rabbitmq.com/download.html

Но есть вариант гораздо проще и быстрее — развернуть готовый docker контейнер. Так и поступим. Изначально должен быть установлен сам Docker. Это тоже не проблема, есть клиент под Windows с интуитивно понятным интерфейсом: https://www.docker.com/products/docker-desktop/

 После установки Docker, перезагрузки и возможно обновления подсистемы WSL (все инструкции даст сам Docker) достаточно открыть терминал и выполнить команду:

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=rabbit -e RABBITMQ_DEFAULT_PASS=rabbit rabbitmq:3.12-management

Обратите внимание, здесь есть небольшая модификация, я задал пользователя и пароль для сервиса. Так удобнее работать. Пароль по умолчанию был guest.

Сразу оставлю небольшую справку, по работе с контейнером:

1. Чтобы остановить контейнер, необходимо выполнить:

docker stop rabbitmq

2. Чтобы запустить:

docker start rabbitmq

3. Чтобы удалить:

docker rm rabbitmq

Можно управлять контейнером и через интерфейс программы Docker-desktop.

 

После установки можно сразу открыть страницу управления Rabbit MQ по адресу http://localhost:15672


А после логина мы попадаем в основное окно Rabbit MQ

Никаких настроек пока делать не будем и перейдём к реализации обмена в 1С. В процессе станет понятно, какие настройки понадобятся.


Отправка сообщений в Rabbit MQ из 1С

Я буду использовать решение PinkRabbitMQ от BIT:ERP. Первое, нам потребуется библиотека, которую можно скачать с GITHUB https://github.com/BITERP/PinkRabbitMQ/releases/tag/addins_PinkRabbitMQ_149.

В релизах есть несколько версий, чтобы в одной базе можно было подключить несколько экземпляров одной библиотеки для разных обменов.

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

Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх("ОбщийМакет.PinkRabbitMQ", "BITERP", ТипВнешнейКомпоненты.Native);

Не буду заострять внимание на подключении, пример можно посмотреть в синтакс-помощнике 1С. 

Более интересен процесс отправки и получения сообщений. Отправка сообщений осуществляется методом BasicPublish. Но перед этим следует установить соединение с сервисом Rabbit MQ методом Connect.

ИмяТочкиОбмена = "data";
ИмяОчереди = "project";
ОтправляемоеСообщение = "Test";
Компонента = Ждать RebbitMQКлиент.ПолучитьКомпоненту();
Компонента.Connect("localhost", 5672, "rabbit", "rabbit", "/");
Компонента.BasicPublish("", ИмяОчереди, ОтправляемоеСообщение, 0, Ложь);   

Для подключения нам необходимо знать адрес сервиса, порт, пользователя и пароль. Все это было задано в момент установки Rabbit MQ. Для того чтобы отправить или получить сообщения, нужно знать Exchanges (имя точки обмена) и Queues (имя очереди), их мы и передаём в методе BasicPublish. Настроить их проще всего через интерфейс сервиса, но, если требуется, библиотека позволяет создать их программно.

На странице Exchanges добавим точку обмена.

А на странице Queues and Streams добавим очередь.

Ещё есть параметр Virtual host (виртуальный хост), по умолчанию он равен «/» и, как правило, не меняется.

После этих настроек можно выполнить код, описанный выше.


Получение сообщений

Получение сообщений происходит методом BasicConsumeMessage. Но перед его вызовом ещё требуется использовать метод BasicConsume, который начинает чтение и регистрирует потребителя сообщений для очереди. Для чтения достаточно знать только имя очереди.

ИмяОчереди = "project";
ОтправляемоеСообщение = "";
НеЖдать = Ложь; //noConfirm
ТегСообщения = 1;
ОтветноеСообщение = "";
Компонента = Ждать RebbitMQКлиент.ПолучитьКомпоненту();
Компонента.Connect("localhost", 5672, "rabbit", "rabbit", "/");
Потребитель = Компонента.BasicConsume(ИмяОчереди, "", НеЖдать, Ложь, 0);
Если Компонента.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения, 100) Тогда
    Компонента.BasicAck(ТегСообщения);
    Сообщить("Успешно! Из очереди прочитано сообщение " + ОтветноеСообщение);
КонецЕсли;
Компонента.BasicCancel("");

Обратите внимание ещё на один метод BasicAck. Он отсылает серверу подтверждение (ack), что сообщение обработано и его можно удалить.

Это метод работает вместе с параметром noConfirm, который указывает сервису очищать очередь после прочтения любого сообщения или ждать ответ методом BasicAck.

Т.е. если noConfirm установить в значение Истина, очередь будет автоматически очищаться. В таком случае нам нужно сразу читать все сообщения.

Если мы отказываемся от автоматической очистки очереди, то с помощью метода BasicAck мы можем подтвердить прочтение сообщения и только после этого оно будет удалено. Переменная ТегСообщения, которая устанавливается в методе BasicConsumeMessage, содержит номер прочитанного сообщения. Он передаётся в метод BasicAck.

Здесь я описал минимум, который достаточен, чтобы организовать обмен с брокером сообщений Rabbit MQ.

Пример реализации обмена выложен на GitHUB. Можно клонировать проект по адресу git@github.com:free-archer/RabbitMQ_Simle.git и развернуть в EDT, а можно просто скачать выгрузку конфигурации и базы https://github.com/free-archer/RabbitMQ_Simle/releases/tag/v1.0.

В конфигурации реализован пример работы с Rabbit MQ на клиенте и на сервере. Настройки подключения хранятся в регистре. Это позволяет легко настроить подключения и проверить работоспособность сервиса.


Заключение

Хочется вернуться к вопросу, который я обозначил вначале, и понять, какую нишу брокеры сообщений занимают в инфраструктуре 1С.

Если 1С обменивается со сторонними системами, разработанными не на платформе 1С, выбор брокера сообщений, скорее всего, будет продиктован разработчиками этой системы. И Rabbit MQ может быть выбран как самый популярный и проверенный временем брокер.

Но нужен ли брокер, если обмен строится между системами, разработанными на платформе 1С? Вопрос не простой. По моему мнению, с обменом большими порциями данных лучше справится типовой обмен БСП по технологии КД2 или КД3. И применение брокера сообщений не даст особых преимуществ, а только усложнит систему

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

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

36000 руб.

03.08.2020    16006    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18017    10    15    

14

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12942    32    8    

12

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

28000 25200 руб.

28.05.2015    85153    26    51    

50

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

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

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    89444    163    217    

320
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 315 19.10.23 12:38 Сейчас в теме
Как оно часто бывает, почему-то тесно связываются брокер сообщений, обмены и КД2/КД3 до кучи.
Ну нету таких связей!
2. maksa2005 534 19.10.23 13:14 Сейчас в теме
Прочитал. Вник. Думаю. Мне это нужно реализовывать и что мне это даст? Действительно. У меня есть обмены на http и COM в рамках одной сети. Есть обмен как выгрузка в файл (в целях защиты сервера) и передача по dropbox. Из всего этого 1 вопрос: Стоит ли перейти на rabbit и как изменит мою (компании) жизнь?
3. Sedaiko 580 19.10.23 13:30 Сейчас в теме
(2) Rabbit удобен для балансировки нагрузки. Например в пиковые периоды получатель не успевает обрабатывать все запросы (привет ФСС:) ), особенно когда он синхронный или асинхронность хромает или проблемы с масштабированием.
7. TMV 14 19.10.23 18:45 Сейчас в теме
(3) Хороший комментарий, только не ответ на вопрос)
4. booksfill 19.10.23 13:41 Сейчас в теме
Есть ли возможность при получении сообщений использовать не PULL а PUSH?
Т.е. не проверять самим очередь сообщений, а реагировать на факт их помещения в очередь другой программой?

Есть ли возможность настраивать время жизни не доставленных сообщений в очереди?
41. zhichkin 1456 17.11.23 02:46 Сейчас в теме
(4) Насколько я знаю и понимаю этот вопрос, нет: получение сообщений от брокера по технологии PUSH от сервера сделать в 1С, мягко говоря, очень сложно, если вообще возможно. Это касается 1С NAPI компонент, как для RabbitMQ, так и для Apache Kafka.
Сложность заключается в том, как "пробросить" callback C/C++ (вызов функции по указателю) из ВК в 1С.
Это можно попробовать сделать, например, используя внешние события 1С (метод ExternalEvent интерфейса IAsyncEvent). Так работают сканера штрих-кодов. Однако это не вполне удачное/надёжное решение, так как в таком случае, как минимум, не совсем понятно, если вообще возможно, организовать подтверждение получения сообщений брокеру.
43. booksfill 17.11.23 10:29 Сейчас в теме
(41)
Если Rabbit умеет (понятия не имею умеет ли) в UDP или TCP на well known ports и не собирается ждать никаких подтверждений, то не вижу особых проблем во внешней компоненте тупо слушать порт.

Суть не в том, что очередь обязана доставить сообщение конкретному адресату и дождаться подтверждения, а в том, чтобы потенциальный пользователь знал, что в очередь что-то пришло.
Не важно ему или нет.
Это, конечно, не так удобно, но он хотя бы не будет каждые N секунд ломиться в очередь, если знает, что ничего не изменилось.

Впрочем, опять же, если Rabbit в принципе умеет о чем-то оповещать внешний мир (а даже если и нет, достаточно быстро сообщать о состоянии очереди по запросу), никто не мешает создать простейший брокер сообщений.

Назначение которого будет только проверять есть ли сообщения в очереди и реализовать механизм подписки.

Брокер тупо опрашивает очередь и сообщает подписчику, что для него что-то есть. Все! Даже ждать пока подписчик окажется в сети/восстановит подключение/сообщит о том, что прочитал сообщение и т.п. не его задача - нет, ну и не получит уведомления, сам проверит - будет, на всякий случай, раз 10 минут, а не раз в 5 секунд проверять очередь.

Такое примитивное решение с хранением подписчиков, данных о наличие сообщений и т.п. в оперативной памяти и простым слушанием порта реализуется в тысячу строк кода и за неделю (на случай обычных незатыков, когда что-то пошло не так), например, на С++. Увы, я на нем уже лет 15 ничего не пишу и почти ничего не помню, но что-то про возможности языка еще в голове осталось.
Да что там C++, вообще, как вариант, пишете модный микросервис на JScript на node.js и никаких проблем с переносимостью, библиотеками, нативными компонентами. А в 1С поднимаем http сервис.
5. starik-2005 3040 19.10.23 14:58 Сейчас в теме
Мну кажеццо, што когда через раббит передаецца полная выгрузка (все измененные объекты, конфа и прочее), то это нивелирует само по себе понятие брокера сообщений. Вот если бы пообъектно все переезжало (записал объект - поехала цепочка сообщений с объектом и подчиненными, если они тоже были перезаписаны), то это было бы покрасоте...
Bassgood; genayo; implecs; dsdred; +4 Ответить
10. genayo 19.10.23 22:17 Сейчас в теме
(5) Да, использовать рэбит и Кафку не для событийного обмена одиночными объектами достаточно странная идея...
Bassgood; dsdred; +2 Ответить
6. GenAcid 19.10.23 15:34 Сейчас в теме
Родная компонента rabbimq .net client прекрасно цепляется к 1с https://www.rabbitmq.com/dotnet.html
9. nixel 1409 19.10.23 21:04 Сейчас в теме
12. GenAcid 20.10.23 06:43 Сейчас в теме
13. nixel 1409 20.10.23 07:45 Сейчас в теме
(12) не, через com не интересно)
44. lemilk 2 27.12.23 12:29 Сейчас в теме
(6) Эта компонента позволяет получать и отправлять сообщения? Примеры использования в 1С есть?
45. GenAcid 27.12.23 13:23 Сейчас в теме
(44) может и отправлять и принимать. По ссылке примеры на c#, по аналогии несложно в 1с написать
8. Mi11er 96 19.10.23 20:26 Сейчас в теме
А ещё шикарно работает Кафка или красная панда ... Так к слову ))
14. FreeArcher 160 20.10.23 07:48 Сейчас в теме
(8) Посмотрел, там есть Kafka REST Proxy, наверное это удобнее будет. Спасибо.
Но почему то на слуху у всех Rabbit, хотя я посмотрел он всего на 3 года раньше Kafka вышел.
20. Mi11er 96 20.10.23 11:26 Сейчас в теме
(14) Ну просто в среде 1С наверное кролик более распространен.

А так. Для себя открыл кафку и прям рад.

Использую для сообщений в Битрикс боте. Закинул в топик. Сервис вычитал и отправил сообщение.

А так. Вариантов с брокерами можно придумать много.
15. dsdred 3333 20.10.23 09:04 Сейчас в теме
Есть 2 варианта:

Использовать внешнюю Native API компоненту.
Использовать HTTP API.


1С Шина имеет тоже коннектор.
16. OstHusky 32 20.10.23 10:36 Сейчас в теме
Брокер сообщений принесет пользу в следующих двух случаях:
1) Большое количество различных систем, в том числе не на 1С. (5-10 штук), особенно если выгружается однотипная информация в несколько систем.
В этом случае не делаем кучу разных папок для каждой системы, не делаем отдельно выгрузку в каждую. И вне зависимости от возможностей других систем из 1С выгружаем в одном формате.
2) Большое количество сообщений с высокой интенсивностью работы. Например чат, онлайн обновление информации в других системах, где требуемая актуальность данных идет на секунды.
Например клиент активировал бонусную карту на сайте пока стоит на кассе и через пару секунд кассир должен ее увидеть в кассовом ПО для пробития чека. И таких магазинов сотни.

При стандартных потребностях обмена между БП - ЗУП - УТ использование брокера в 99% случаев неоправданно
DimaP; olexi2012; +2 Ответить
23. genayo 20.10.23 22:35 Сейчас в теме
(16) Всё от объемов зависит же, отправлять из УТ в БП 150 тыс. документов в день через КД не очень быстро, мягко говоря...
17. implecs 86 20.10.23 11:18 Сейчас в теме
(1) Абсолютно согласен. Возможно из-за недопонимания видят в брокерах "волшебную таблетку".
18. implecs 86 20.10.23 11:20 Сейчас в теме
(2) Rabbit просто возьмёт на себя некоторые операции. Будет хранить сообщения пока они не будет прочитаны получателем. Позволит маршрутизировать и иметь одну точку входа и один подход к обменам данными, ласт единообразие и универсализацию. Так же Rabbit позволит отправлять данные порциями только единожды, а не каждый раз в случае если они не были получены.
19. implecs 86 20.10.23 11:21 Сейчас в теме
(4) Думаю что RabbitMQ не может уведомлять о наличии сообщения для клиента, он не хранит информацию о клиентах. А по второму вопросу, гугл подсказывает, что RabbitMQ позволяет устанавливать TTL (время жизни) как для сообщений, так и для очередей.
21. booksfill 20.10.23 11:43 Сейчас в теме
(19)
Думаю что RabbitMQ не может уведомлять о наличии сообщения для клиента, он не хранит информацию о клиентах.


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

Иначе не ясно как решить вопрос производительности - при попытках постоянного опроса очереди.
Хорошо, если это терпит и мы, например, в фоновом задании раз 5 минут проверяем очередь, а если это критично, например, отдельная очередь по биржевым котировкам, то фоновое, похоже, - не выход.

Впрочем, я, вероятно, не вполне понимаю область применения такой шины.
22. milanse 38 20.10.23 20:32 Сейчас в теме
(21) Тоже ускользает смысл, если кролик🐰 не дёргает 1с на предмет передать новые сообщения.
36. booksfill 27.10.23 15:16 Сейчас в теме
(22)Я тут попробовал разобраться с компонентами для интеграции, судя по всему бесплатная не умеет ни в PUSH ни даже в TTL, а вот, опять же судя по описанию, от серебряной пули таки умеет.
Кроме того, платная версия интегрируется и с Kafka.
Сколько стоит смотреть не стал, пока надо в принципе поиграться.

Меня привлекает что в принципе на этом можно организовать бесплатную систему взаимодействия для клиентов на любом уровне лицензий. И она будет содержать только то, что надо, а не все в одном.
24. anosin 29 20.10.23 23:35 Сейчас в теме
Опять тот самый случай когда комметарии читать интереснее чем саму статью ;)
А по теме то автору огромное спасибо за доходчивое описание о рэбите, но вот на недавнем инфостартэвентся везде только о кафке и говорили вопрос почему?
25. genayo 21.10.23 09:10 Сейчас в теме
(24) Кафка и рэбит имеют достаточно существенные отличия, и в общем случае не совсем взаимозаменяемые.
26. cdiamond 233 22.10.23 14:37 Сейчас в теме
Клиент протокола уже встроен в платформу, если кто не знал, AMQP 1.0. В кролике другая, 0.9.*, но через плагин он может и в 1.0. Если кто протестирует и подтвердит что работает, то это будет бомба и смерть Шине. Но это неточно)
37. milanse 38 29.10.23 17:04 Сейчас в теме
(26) Шина может подключаться к кролику по amqp, а не сама по нему работает. Если есть возможность что-то продавать, какой смысл раздавать это бесплатно?
39. milanse 38 08.11.23 12:49 Сейчас в теме
(26) Шина может общаться по протоколу AMQP, в платформу ничего не встроено.
27. implecs 86 23.10.23 08:23 Сейчас в теме
(26) Как найти его в синтакс-помощнике, дайте навдку, я попробую проверить?
34. cdiamond 233 25.10.23 07:32 Сейчас в теме
(27) объект конфигурации в общих, Сервисы интеграции вроде называется. Давно слушал курс по Шине, все забыл, но утверждение про протокол шины запомнил (может эффект Манделы). И в официальном описании он упоминается, но напущено максимум тумана чтобы это не подчеркивать. То есть суть задачи в том, чтобы накатить в раббите плагин для протокола версии 1.0, а в конфигураторе 1с через этот объект попытаться подключится, и если хорошо то написать и отправить сообщение, как будто это Шина.
35. cdiamond 233 25.10.23 14:36 Сейчас в теме
(34) Копнул сам, похоже напрямую в коде не настроить этот объект, проблема в адрес сервера - это URL по протоколу HTTP, возвращающий настройки Шины, т.е. без автонастройки вообще никак. Если у кого есть Шина - посмотреть бы что там возвращается, и попробовать эмулировать тем же апачем.
28. implecs 86 23.10.23 08:28 Сейчас в теме
(24) Вот собрал информацию по объему сообщений способных гарантированно передавать в секунду

Rabbit MQ - 30 - 40 тыс. сообщений в секунду
Apache Kafka - порядка 500 тыс. сообщений в секунду
LavinMQ (недавно появился) - порядка 1 миллиона сообщений в секунду

Отсюда вытекает, что в Hiload и Big Data Apache Kafka становится популярнее, наверное по этому про неё все говорят сейчас. Но не всегда нужен такой объем данных.

И Rabbit MQ - это "умный сервер, глупый клиент", а Apache Kafka наоборот "глупый сервер, умный клиент" отсюда и большая скорость. В Кафке практически нет маршрутизации, а в кролике, оно очень гибкая.
42. zhichkin 1456 17.11.23 03:11 Сейчас в теме
(28) При оценке производительности брокера следует учитывать, как минимум, следующие факторы или требования:
1. Гарантированность доставки, а именно использование персистентных очередей и соблюдение протокола подтверждения доставки, как клиентом, так и брокером, в зависимости от направления передачи сообщений.
2. Размер сообщений в байтах.
3. Соблюдение требований строгой или произвольной последовательности передачи данных.
4. Требования идемпотентности или дедупликации сообщений (отсутствие повторов).

Если говорить о гарантиях доставки, например, at least once in order (хотя бы один раз с соблюдением порядка отправителя), то, например, для сообщений средним "весом" 3 Kb каждое, RabbitMQ с персистентными очередями в один поток нам удавалось "раскачать" до 10-15 тысяч сообщений в секунду. Однако тут надо быть очень осторожным, чтобы не "завалить" сервер брокера в троттлинг (throttling) - в таком случае возможны потери сообщений. Оптимальное количество сообщений в секунду в таком случае определяется эмпирическим путём.

Согласно докладам на последней конференции Инфостарт 2023, Apache Kafka даёт примерно такую же производительность для идентичных требований гарантии доставки, если использовать 1С NAPI компоненты.
29. implecs 86 23.10.23 08:32 Сейчас в теме
(22) 1С необходимо периодически спрашивать кролика о наличии сообщений.

Вобще теоретически клиент должен держать постоянно соединение с Rabbit и тот будет сам отдавать сообщения, когда они появятся в нужной очереди. Но как это реализовать со стороны 1С текущими возможностями библиотек мне пока не понятно, по этому приходится периодически создавать подключение и закрывать его. Но это быстрый процесс, не нагружающий систему.
31. gybson 23.10.23 21:20 Сейчас в теме
(29) теоретически взаимодействия бывают синхронными и асинхронными

https://habr.com/ru/companies/oleg-bunin/articles/543946/
30. milanse 38 23.10.23 14:21 Сейчас в теме
(29) в шине так реализовано. Рег задание раз в 2 минуты.
EvgeTrofi; +1 Ответить
32. implecs 86 24.10.23 08:09 Сейчас в теме
(31) Брокер сообщения это уже асинхронное взаимодействие, вы не ждете ответа, не ждете пока клиент заберет сообщения.
Я говорил о том, каким образом можно реализовать постоянное соединение с брокером. Периодическими опросами 40 тыс. сообщений в секунду никак не получить.
Хотя практического применения со стороны 1С таких обменов возможно и нет.
33. gybson 24.10.23 10:11 Сейчас в теме
(32) У 1С с брокером и так постоянное соединение, это в компоненте заложено. Если брокер будет сразу передавать сообщение от источника к получателю, то это будет поток - синхронное взаимодействие.
38. gybson 06.11.23 12:53 Сейчас в теме
(32) просто не "Если BasicConsumeMessage", а "Пока BasicConsumeMessage" надо написать и будут тысячи сообщений в секунду. У нас по HTTP около тысячи сообщений в секунду получается
40. user1950534 09.11.23 12:42 Сейчас в теме
Если у Rabbit как вы говорите кривое HTTP API, то нафиг он нужен? Допустим, со стороны 1С мы его прикрутили. А с другой стороны что будет? Тоже какая-то фиготень с библиотеками? Мне надо тупо забрать данные из Mango java-скриптом под виндой и положить в SQL-базу. Вот представляю свои мучения с Rabbit...
46. Komanda1C 2 27.02.24 14:34 Сейчас в теме
Скачал DT, выполнил настройки, пытаюсь проверить работу.
Возникает ошибка -
Тип не определен (AddIn.BITERP.PinkRabbitMQ3)
{ОбщийМодуль.RebbitMQКлиент.Модуль(21)}:Компонента = Новый("AddIn.BITERP.PinkRabbitMQ3");
47. booksfill 27.02.24 14:43 Сейчас в теме
(46)
AddIn.BITERP.PinkRabbitMQ3


Попробуйте поиграться с названиями, насколько я помню, они намудрили с названиями для 32 и 64 разрядов.
Попробуйте: PinkRabbitMQ или PinkRabbitMQ2
Оставьте свое сообщение