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. И применение брокера сообщений не даст особых преимуществ, а только усложнит систему

См. также

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

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

36000 руб.

03.08.2020    17780    19    22    

16

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

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

5040 руб.

04.05.2021    19844    13    17    

16

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

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

22656 руб.

25.05.2021    14421    42    8    

18

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

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

24000 руб.

27.09.2024    1168    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 327 19.10.23 12:38 Сейчас в теме
Как оно часто бывает, почему-то тесно связываются брокер сообщений, обмены и КД2/КД3 до кучи.
Ну нету таких связей!
implecs_team; +1 Ответить
2. maksa2005 550 19.10.23 13:14 Сейчас в теме
Прочитал. Вник. Думаю. Мне это нужно реализовывать и что мне это даст? Действительно. У меня есть обмены на http и COM в рамках одной сети. Есть обмен как выгрузка в файл (в целях защиты сервера) и передача по dropbox. Из всего этого 1 вопрос: Стоит ли перейти на rabbit и как изменит мою (компании) жизнь?
3. Sedaiko 590 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 1524 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 3087 19.10.23 14:58 Сейчас в теме
Мну кажеццо, што когда через раббит передаецца полная выгрузка (все измененные объекты, конфа и прочее), то это нивелирует само по себе понятие брокера сообщений. Вот если бы пообъектно все переезжало (записал объект - поехала цепочка сообщений с объектом и подчиненными, если они тоже были перезаписаны), то это было бы покрасоте...
Bassgood; genayo; implecs_team; 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 1433 19.10.23 21:04 Сейчас в теме
12. GenAcid 20.10.23 06:43 Сейчас в теме
13. nixel 1433 20.10.23 07:45 Сейчас в теме
(12) не, через com не интересно)
amiralnar; +1 Ответить
44. lemilk 3 27.12.23 12:29 Сейчас в теме
(6) Эта компонента позволяет получать и отправлять сообщения? Примеры использования в 1С есть?
45. GenAcid 27.12.23 13:23 Сейчас в теме
(44) может и отправлять и принимать. По ссылке примеры на c#, по аналогии несложно в 1с написать
8. Mi11er 99 19.10.23 20:26 Сейчас в теме
А ещё шикарно работает Кафка или красная панда ... Так к слову ))
implecs_team; +1 Ответить
14. FreeArcher 162 20.10.23 07:48 Сейчас в теме
(8) Посмотрел, там есть Kafka REST Proxy, наверное это удобнее будет. Спасибо.
Но почему то на слуху у всех Rabbit, хотя я посмотрел он всего на 3 года раньше Kafka вышел.
20. Mi11er 99 20.10.23 11:26 Сейчас в теме
(14) Ну просто в среде 1С наверное кролик более распространен.

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

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

А так. Вариантов с брокерами можно придумать много.
15. dsdred 3593 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_team 160 20.10.23 11:18 Сейчас в теме
(1) Абсолютно согласен. Возможно из-за недопонимания видят в брокерах "волшебную таблетку".
18. implecs_team 160 20.10.23 11:20 Сейчас в теме
(2) Rabbit просто возьмёт на себя некоторые операции. Будет хранить сообщения пока они не будет прочитаны получателем. Позволит маршрутизировать и иметь одну точку входа и один подход к обменам данными, ласт единообразие и универсализацию. Так же Rabbit позволит отправлять данные порциями только единожды, а не каждый раз в случае если они не были получены.
19. implecs_team 160 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 235 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_team 160 23.10.23 08:23 Сейчас в теме
(26) Как найти его в синтакс-помощнике, дайте навдку, я попробую проверить?
34. cdiamond 235 25.10.23 07:32 Сейчас в теме
(27) объект конфигурации в общих, Сервисы интеграции вроде называется. Давно слушал курс по Шине, все забыл, но утверждение про протокол шины запомнил (может эффект Манделы). И в официальном описании он упоминается, но напущено максимум тумана чтобы это не подчеркивать. То есть суть задачи в том, чтобы накатить в раббите плагин для протокола версии 1.0, а в конфигураторе 1с через этот объект попытаться подключится, и если хорошо то написать и отправить сообщение, как будто это Шина.
35. cdiamond 235 25.10.23 14:36 Сейчас в теме
(34) Копнул сам, похоже напрямую в коде не настроить этот объект, проблема в адрес сервера - это URL по протоколу HTTP, возвращающий настройки Шины, т.е. без автонастройки вообще никак. Если у кого есть Шина - посмотреть бы что там возвращается, и попробовать эмулировать тем же апачем.
28. implecs_team 160 23.10.23 08:28 Сейчас в теме
(24) Вот собрал информацию по объему сообщений способных гарантированно передавать в секунду

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

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

И Rabbit MQ - это "умный сервер, глупый клиент", а Apache Kafka наоборот "глупый сервер, умный клиент" отсюда и большая скорость. В Кафке практически нет маршрутизации, а в кролике, оно очень гибкая.
toxa688; anosin; +2 Ответить
42. zhichkin 1524 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_team 160 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_team 160 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 1 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
48. dmitry1984 10.06.24 09:24 Сейчас в теме
Реализовал свои NAPI компоненты для RMQ и Kafka, возможно кому-то будет полезно/интересно.
https://github.com/kovalevdmv/1CRabbitMQ
https://github.com/kovalevdmv/1CApacheKafka
49. пользователь 19.06.24 18:46
Сообщение было скрыто модератором.
...
50. dmitry1984 27.06.24 11:17 Сейчас в теме
(49) Не вводите в заблуждение (возможно вы не знакомы с функционалом gitHub). Все можно скачать, переходите по ссылка на gitHUB и там справа ссылка Releases. Там все версии для загрузки. Так же в описании на самом gitHub все подробно расписано. Надо внимательнее читать. Для получения платной надо связаться с автором. Это так же написано в описании на gitHub.
51. acsent 1203 17.07.24 10:58 Сейчас в теме
Замечание. Дефолтному юзеру guest/guest можно приходить только из localhost. Как для админки, так и для отправки сообщений.
Поэтому может потребоваться создать нового пользователя
Оставьте свое сообщение