PinkRabbitMQ - Native API компонента 1С с открытым исходным кодом, для обмена сообщениями через RabbitMQ

29.07.19

Разработка - Разработка внешних компонент

PinkRabbitMQ представляет собой Native API компоненту для 1С Предприятия 8 (Windows 32bit и 64bit) с открытым исходным кодом на с++ (можно собрать компоненту самостоятельно). PinkRabbitMQ это низкоуровневая компонента которая реализует обмен по протоколу AMQP с брокером сообщений RabbitMQ. Для организации высокоуровнего обмена между информационными базами предназначен Адаптер. Компонента разрабатывается в рамках проекта Адаптер.

Скачать файлы

Наименование Файл Версия Размер
PinkRabbitMQ - Native API компонента 1С с открытым исходным кодом, для обмена сообщениями через RabbitMQ:
.zip 654,98Kb
984
.zip 654,98Kb 984 Скачать бесплатно
Демонстрационная обработка
.epf 695,44Kb
1106
.epf 695,44Kb 1106 Скачать бесплатно

Предпосылки создания своей компоненты

  • Мы активно развиваем свой проект Адаптер (о нем мы уже писали на инфостарте), в котором реализован обмен через RabbitMQ
  • Т.к. 1С напрямую не поддерживает протокол AMQP (а для обмена с брокером RabbitMQ через http есть ограничения) нам потребовалась внешняя компонента
  • Раньше мы использовали стороннюю компоненту Yellow RabbitMQ, но для некоторых наших заказчиков было важно избежать зависимости от конкретного поставщика, и наличие закрытого кода (в виде скомпилированной компоненты) являлось важным аргументом против использования Yellow RabbitMQ
  • Технически создание своей компоненты нам казалось не сложным
  • У нас уже был весь набор тестов для Адаптера, который позволил нам быть уверенными, что наша компонента работает
  • Хотелось получить возможность самостоятельного развития компоненты

 

Наши цели публикации исходных кодов компоненты Pink RabbitMQ:

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

 

Особенности компоненты Pink RabbitMQ:

  • Описание API компоненты содержится в https://github.com/BITERP/PinkRabbitMQ/blob/master/README.md
  • Представляет собой Native API компоненту для 1С Предприятия 8 (Windows 32bit и 64bit). Для Linux мы не компилировали, но радикальных препятствий для этого нет (примерно понятно, какие нужно для этого сделать доработки)
  • С точки зрения API компонента практически полностью совместима с  Yellow RabbitMQ т.е. в Адаптер мы просто замени компоненту на нашу, но те механизмы, которые не нужны в Адаптере мы не реализовывали
  • В основе компоненты лежат "свежие" библиотеки
    •  AMQP-CPP - асинхронный клиент для работы  c протоколом AMQP
    •  POCO C++ - только для работы с tcp socket
  • Для обеспечения совместимости с Yellow RabbitMQ мы внутри компоненты превратили асинхронные методы библиотеки в синхронные, что немного повлияло на производительность
  • При разработке исходный код компоненты проверяются Sonar Cube и тестируются BDD тестами Адаптера (см. бэджи в репозитории)

 

Вопросы производительности

Поскольку мы использовали ранее Yellow RabbitMQ, то и сравнивали с ней:

Простой синтетический тест

Метод

Yellow RabbitMQ

Pink RabbitMQ

Последовательная отправка 1000 сообщений (сек)

28.30

57.54

Последовательное получение 1000 сообщений (с отправкой 2000 логов) (сек) 220.41 390.70

 

Тест на реальном проекте где в Адаптере компонента Yellow RabbitMQ была заменена на Pink RabbitMQ.

У нас не было цели провести отдельный чистый тест, мы просто хотели убедиться, что на одном из наших проектов, на котором мы недавно перешли с обмена БСП (не типового) на обмен через RabbitMQ при переходе на компоненту Pink RabbitMQ не будет проблем с производительностью.

В рамках теста из базы УТ10.3 в базу ERP переносился 1241 документ и проводился в ERP (реализации товаров превращались в поступления)

Метод

Yellow RabbitMQ

Pink RabbitMQ

План обмена из БСП в формате КД2

Длительность отправки из УТ 10.3 (час) 1:47 2:19 1:38
Длительность загрузки в ERP (час) 3:10 2:48 3:36
Общая длительность от момента как начали отправлять до момента, что все получили (час) 3:12 2:51 3:47


т.е. мы видим, что на реальном проекте

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

по этому пока мы не считаем меньшую производительность Pink RabbitMQ проблемой

 

API

Компонента имеет ряд методов для работы из встроенного языка 1С. Параметры с тегом [НЕ РЕАЛИЗОВАНО] имеют пустую реализацию, но передавать их все равно требуется. Параметры с тегом [НЕОБЯЗАТЕЛЬНЫЙ] можно не передавать. Список методов:

Connect - устанавливает соединение с сервером RabbitMQ

Параметры:

  • host - Строка - Адрес сервера RabbitMQ
  • port - Число - Порт работы через tcp (обычно 5672)
  • login - Строка - Имя пользователя
  • pwd - Строка - Пароль пользователя
  • vhost - Строка - Vhost пользователя
  • pingRate - Число - [НЕ РЕАЛИЗОВАНО][НЕОБЯЗАТЕЛЬНЫЙ]. Частота пульса

DeclareExchange - Объявить точку обмена

Параметры:

  • name - Строка - Имя exchange
  • type - Строка - Тип точки обмена. Поддерживаются "direct", "fanout", "topic"
  • onlyCheckIfExists - Булево - [НЕ РЕАЛИЗОВАНО] Не создавать новую, выбросить исключение, если такой точки нет.
  • durable - Булево - Сохранять сообщения на диске на случай рестарта RMQ (не рекомендуется)
  • autodelete - Булево - Удалить после того, как от точки будут отвязаны все очереди.

DeleteExchange - Удаляет очередь с сервера

Параметры:

  • name - Строка- Имя точки обмена.
  • ifunused - Булево - Удаление будет выполнено, только если точка обмена не используется.

DeclareQueue - Объявить очередь

Параметры:

  • name - Строка - Имя объявляемой очереди.
  • onlyCheckIfExists - Булево - [НЕ РЕАЛИЗОВАНО] Не создавать очередь с таким именем, использовать существующую
  • save - Булево - Кешировать сообщения на диске, на случай падения RMQ.
  • exclusive - Булево - [НЕ РЕАЛИЗОВАНО] Только текущее соединение может иметь доступ к этой очереди.
  • autodelete - Булево - Удалить очередь если к ней был подключен, а затем отключен читающий клиент.

Возвращаемое значение:

  • Имя очереди, заданное явно в 1-м параметре.

DeleteQueue - Удаляет очередь с сервера

Параметры:

  • name - Строка - Имя очереди
  • onlyIfIdle - Булево - Удаление будет выполнено, только если очередь не используется
  • onlyIfEmpty - Булево - Удаление будет выполнено, только если очередь пуста

BindQueue - Установить связь очереди. Создает маршрут от точки обмена до очереди.

Параметры:

  • queue - Строка - Имя очереди
  • exchange - Строка - Имя точки обмена
  • routingKey - Строка - Rлюч маршрутизации.

UnbindQueue - Отсоединяет очередь от точки обмена.

Параметры:

  • queue - Строка - Имя очереди
  • exchange - Строка - Имя точки обмена
  • routingKey - Строка - Rлюч маршрутизации.

BasicPublish - Отправить сообщение

Параметры:

  • exchange - Строка - Имя точки в которую отправляется сообщение
  • routingKey - Строка - Ключ маршрутизации (см. руководство RMQ)
  • message - Строка - Тело сообщения
  • livingTime - Число - [НЕ РЕАЛИЗОВАНО] Время жизни сообщения в миллисекундах
  • persist - Булево - [НЕ РЕАЛИЗОВАНО] Сбрасывать сообщение на диск

BasicReject - Отказывается от последнего полученного сообщения. Работает по принципу Ack, но в обратную сторону.

Параметры отсутствуют

BasicConsume - Начать чтение. Регистрирует потребителя сообщений для очереди.

Параметры:

  • queue - Строка - Очередь из которой будем читать сообщения.
  • consumerId - Строка - [НЕ РЕАЛИЗОВАНО] имя потребителя. Если не задан, то имя потребителя сгенерирует сервер и вернет из метода
  • noConfirm - Булево - [НЕ РЕАЛИЗОВАНО] не ждать подтверждения обработки. Сообщения будут удалены из очереди сразу после отправки на клиента.
  • exclusive - Булево - [НЕ РЕАЛИЗОВАНО] монопольно захватить очередь
  • selectSize - Число - [НЕ РЕАЛИЗОВАНО] количество сообщений единовременно отправляемых клиенту. Оптимизационный параметр, если > 1 усложняет программирование клиента

Возвращаемое значение:

  • Строка. Имя потребителя, сгенерированное сервером или переданное в параметре ИмяПотребителя.

BasicConsumeMessage - Получить сообщение

Параметры:

  • consumerId - Строка - [НЕ РЕАЛИЗОВАНО] Имя зарегистрированного потребителя
  • outdata - Строка - Выходной параметр. Тело сообщения.
  • timeout - Число - Таймаут ожидания сообщения в миллисекундах. 0 означает без ожидания

BasicCancel - Закрывает канал для чтения сообщений

Параметры:

  • channelId - Строка - Имя созданного ранее потребителя.

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

Параметры отсутствуют

GetLastError - получает информацию о последней ошибке

Параметры отсутствуют

Возвращаемое значение:

  • Строка - Последнее сообщение ошибки

 

Наши ближайшие планы:

  • Мы собираемся поддерживать компоненту, т.к. она является частью нашего решения Адаптер
  • С точки зрения функционала ходим добавить в компоненту асинхронные методы (как в 1С), что увеличит скорость работы и немного упростит алгоритмы Адаптера

 

Как начать использовать Pink RabbitMQ:

  • Скачать демонстрационную обработку, приложенную к статье (компонента находится в ней в виде макета)
  • Скачать из репозитория исходники и воспользоваться инструкцией из readme.md

 

Интересные технические особенности:

  • Источником вдохновения послужила статья https://habr.com/ru/post/253317/
  • Сборка компоненты осуществляется как через sln проект на VS Studio 2019, так и через cmake (см. readme.md)
  • Все зависимости проекта (в частности POCO и AMQP) поставляются прекомпилированными либами для простоты сборки (поэтому репозиторий много весит, но проект собирается элементарно )

Как стать контрибьютером:

  • Репозиторий проекта https://github.com/BITERP/PinkRabbitMQ
  • Как обычно, создавайте issues, делайте форки, вносите доработки, собирайте и проверяйте компоненту и делайте пулл-реквест
  • Мы со своей стороны будем принимать пулл-реквесты после
    • прохождения проверок Sonar Cube и BDD тестами Адаптера
    • оценки соответствия предлагаемых изменений концепции/планам развития Pink RabbitMQ

 

Ждем ваших вопросов/замечаний/предложений

Бесплатно free RabbitMQ Обмен

См. также

Медиадисплей. Рекламный информационный монитор для покупателя.

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

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52106    34    69    

43

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26244    131    99    

83

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44978    117    64    

60

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35082    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

Разработка внешних компонент Платформа 1С v8.3 Платные (руб)

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    54001    35    14    

68

QR-код с логотипом компании (обычная и управляемая форма)

Разработка внешних компонент Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30840    4    4    

8

Внешняя компонента 1С и С++. Продолжаем разговор.

Разработка внешних компонент Платформа 1С v8.3 Бесплатно (free)

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    4040    starik-2005    28    

52

Внешние компоненты 1С и язык C++

Разработка внешних компонент Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    4781    starik-2005    32    

39
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
95. artbear 1448 07.08.19 14:44 Сейчас в теме
(92) В исходном платном компоненте YellowRabbitMQ есть поддержка и Linux, и Win.
97. leobrn 614 19.08.19 11:05 Сейчас в теме
а как в компоненте закрыть соединение ? .Close() не отрабатывает, в документации компоненты не нашел.
98. optimus12345 521 19.08.19 20:37 Сейчас в теме
(97)
Соединение закрывается автоматически при очищении NativeAPI объекта. Нужно установить переменную компоненты в Неопределено. Метода Close() не предусмотрено.
99. maxdmt 28 18.09.19 18:40 Сейчас в теме
Обработка скачана и зарегистрирована.
Так, а где почитать как поставить сервис? к чему подключаться и где настраиваются логины пароли?
100. Begemoth80 267 18.09.19 23:24 Сейчас в теме
(99) Начать можно с бесплатного экаунта на https://www.cloudamqp.com
Если хотите установить сервер у себя, см. https://www.rabbitmq.com/download.html
mrcamomile; Irwin; +2 Ответить
138. mrcamomile 79 28.03.20 21:12 Сейчас в теме
(100) Большое спасибо за труд! Сделали прототип - сейчас обкатываем в проде свой маленький обмен в реальном времени. Обработки от Битрикс24 по сравнению с этим унылое ...
101. An-Aleksey 64 16.10.19 20:28 Сейчас в теме
(99) тоже встал в ступор на этом вопросе - пришлось разгребать кучу мануалов, висов для чайников и набивать шашки.
Если кому-то еще "облегчит жизнь", то краткий перечень шагов для подготовки окружения перед началом использования демо-обработки на своей машинке без использования каких либо внешних бесплатных сервисов:

1. Кролик написан на Erlang, соответственно первым шагом будет установка платформы Erlang и сервера RabitMQ.
Заходим сюда, проверяем последнюю версию Кролика и с какой платформой он совместим (рекомендуем).
Тут скачиваем собственно эту верcию Erlang`a, запускаем установочник, прожимаем Далее-Далее-Далее.
После скачиваем и устанавливаем сервер кролика.
Все установки от имени администратора и желательно без сложно-сочинительных кириллиц в именах путей.

2. По умолчанию кролик администрируется из черного окошка, но можно подрубить браузерный плагин.
Для этого запускаем командную строку от имени администратора и вводим там следующую команду:
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.0\sbin>rabbitmq-pluins enable rabbitmq_management


Сразу после этого нам становится доступна панель администрирования:
http://localhost:15672/
Пользователь и пароль по-умолчанию guest guest

3. В вышеописанной панели на вкладке "Admin" можно (и нужно) создать нового пользователя с паролем.
Там же создаются эти самые "Виртуальные хосты", которые просит обработка (поиск информации о том, что это мифические хосты, которые просила демо-обработка довел до нервного тика). Создаем новый виртуальный хост, даем доступ нашему новому юзеру.
Все предварительный этап закончен.

Теперь уже можно открывать демо-обработку и запускать в любой базе 1С из сетевого окружения.
Настройки обработки:
Адрес:
• localhost (если на той же машине)
• Сетевое имя компьютера, если кролик развернут на другой машине (пробовал по ай-пи адресу, но проверка подключения просто зависала).
Порт:
• 5672 (по умолчанию)
Логин/Пароль:
Атрибуты ново-созданного пользователя в оснастке кролика.
*если использовать guest, который создаетсятся по умолчанию, то доступ будет только с localhost, для подключения к другой машине уже будет ругаться.
Виртуальный хост:
Наименование виртуального хоста, который мы так же создали в панели администрирования.
*теоретически можно было и не создавать и указать "/"

Если в процессе что-то указать не так, то проверка подключения будет выдавать вот такое сообщение:
{ВнешняяОбработка.ПростойПримерРаботыСКомпонентойPinkRabbitMQ.Форма.Форма.Форма(228)}: Ошибка подключения!{ВнешняяОбработка.ПростойПримерРаботыСКомпонентойPinkRabbitMQ.Форма.Форма.Форма(218)}: Ошибка при вызове метода контекста (Connect): Ошибка вызова метода внешней компоненты
ВызватьИсключение ТекстСообщения;

Коллеги, хотелось бы, чтобы методы компоненты были в состоянии определять недомогания в подключении и выдавать причины.
Благо нашел логи кролика, в который он все алерты скидывает:
C:\Users\@UserName@\AppData\Roaming\RabbitMQ\log

Возможно где-то перемудрил, как человек далекий от администрирования шел
(48) по 1совски "в лоб"
brvtvs; starik-2005; skalistratov; Shida; Lion_LexXx; Begemoth80; +6 Ответить
102. Evil Beaver 8107 17.10.19 10:28 Сейчас в теме
(101) а можно сделать вот так:

apt install rabbitmq-server

или даже вот так:
docker run -d bitnami/rabbitmq
starik-2005; An-Aleksey; Begemoth80; +3 Ответить
103. An-Aleksey 64 17.10.19 15:03 Сейчас в теме
(102) Андрей, это команды автоустановка сервера кролика вместе с Erlang`ом?
104. Evil Beaver 8107 17.10.19 15:55 Сейчас в теме
(103) Первая - нет, вторая - да. Но там есть нюансы, это не copy-paste-ready команды, нужны будут некоторые опции
105. An-Aleksey 64 17.10.19 17:20 Сейчас в теме
106. maxdmt 28 23.10.19 17:01 Сейчас в теме
Здравствуйте.
Вопрос.
Как прочитать сообщение с сервера повторно?
Например, я прочитал сообщение с сервера и по каким-то причинам не могу его сейчас обработать.
Вызываю метод BasicReject и очередь все равно очищена.
Если не подтверждать последнее сообщение - это также не помогает.
Подскажите, возможно ли прочитать повторно?
108. optimus12345 521 28.10.19 09:59 Сейчас в теме
(106) Все правильно делаете. Последовательность методов следующая:

basicConsumeMessage() с параметром
--- код, из-за которого нельзя прочитать сообщение---
basicReject() либо просто завершение процесса чтения с выходом из цикла чтения. Сообщение должно вернуться в очередь.

Если этот способ не работает, то нужно смотреть. Возможно ошибка в коде компоненте. ЛУчше зарегистрировать ее на гитхабе.
107. s0nya 26.10.19 18:10 Сейчас в теме
Для интереса сделал простенький скрипт на node.js по примерам с сайта RabbitMQ. Скрипт 1000 сообщений публикует за 0,5 секунд. Компонента за 46 с. Все время сьедает метод компоненты BasicPublish. Разница чуть не в 100 раз. Аналогичная ситуация с чтением. Скорость чтения около 10 сообщений в секунду с сервером кролика на отдельной виртуалке.

Ожидал увидеть не такой разрыв. Можете подсказать почему так?
109. optimus12345 521 28.10.19 10:01 Сейчас в теме
(107)

Все верно. Методы basicPublish и BasicConsumeMessage работают очень медленно из-за непотимально написанного кода. Узкие места известны. В новой версии компоненты собираемся поправить эти моменты.
111. specUT 03.12.19 14:42 Сейчас в теме
Метод Connect проходит хорошо, а потом зависает наглухо на методе DeclareExchange, в чем может быть проблема?
112. specUT 03.12.19 15:29 Сейчас в теме
(111) Разобрался спасибо (99), полез в виртуальные хосты, а там хост "/" его и проставил.
113. optimus12345 521 03.12.19 21:33 Сейчас в теме
114. s0nya 11.12.19 15:58 Сейчас в теме
Поставил последнюю версию 1.7 для тестирования. А она вообще не читает из очереди.
Для интереса подкинул в макет версию 1.6 - здесь все работает, но есть известный баг "Компонента зависает на методе basicCancel" https://github.com/BITERP/PinkRabbitMQ/issues/14
Никто версию 1.7 не смотрел?
115. s0nya 11.12.19 16:37 Сейчас в теме
(114) Оказывается в 1.6 как и в 1.7 работает вычитка после перезапуска 1С. Но если записать что то в очередь, не читается до перезагрузки 1С :(
Обработка из примера, на версии 1.2 проблем не было, но скорость не особо устраивала. В новых действительно менее чем за секунду 1000 сообщений принимает.
Немного доделал чтение для версии 1.7 согласно рекомендациям на гите и новому параметру таймаут:

КлиентКомпоненты.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения,100)
116. optimus12345 521 11.12.19 16:55 Сейчас в теме
(115)
Но если записать что то в очередь, не читается до перезагрузки 1С :(


Этот баг нам неизвестен. Приведите пожалуйста порядок воспроизведение с последовательностью вызовов методов компоненты
117. optimus12345 521 11.12.19 16:57 Сейчас в теме
(116)
Таймаут 100мс - это очень маленький таймаут. Рекомендую устанавливать не менее 1000мс. Для сообщений больше 1 мб может потребоваться 3000мс.
118. s0nya 11.12.19 18:12 Сейчас в теме
(116) За основу спечиально взял обработку из топика. Rabbit используется на CentOS. Версия 3.8.0 Erlang 22.1.4. Библиотека 1.7 с гита.


1. В Rabbit загнал 100 сообщений.
2. Запускаем 1С. Режим компоненты - клиент.
3. Нажимаю проверить подключение. Сообщение "Внешняя компонента успешно установлена"
4. Вкладка получить сообщение - нажимаю Прочитать сообщение. Получаю первое сообщение.
5. Повторное нажатие, в ответ "Очередь пустая!" (в Rabbit осталось 99 сообщений)
6. Вкладка отправить сообщение, нажимаю отправить. Сообщение уходит на Rabbit.
7. Возврат на вкладку чтение и попытка вычитки ничего не даёт.

В коде процедуры ПрочитатьСообщениеКлиентСервер минимальные изменения: добавлена переменная ТегСообщения, в вызов BasicConsumeMessage добавлен таймаут 1000, в вызов BasicAck добавлен параметр ТегСообщения.


Процедура ПрочитатьСообщениеКлиентСервер(КлиентКомпоненты, Форма)
	
	Попытка
		КлиентКомпоненты.Connect(
			Форма.Адрес,
			Форма.Порт,
			Форма.Логин,
			Форма.Пароль,
			Форма.ВиртуальныйХост);
		
		ИмяОчереди = Форма.ИмяОчереди;
		ТегСообщения = 0;
		
		Попытка
			КлиентКомпоненты.DeclareQueue(ИмяОчереди, Ложь, Ложь, Ложь, Ложь);
			
			Потребитель = КлиентКомпоненты.BasicConsume(ИмяОчереди, "", Истина, Ложь, 0);
			
			ОтветноеСообщение = "";
			
			//Если КлиентКомпоненты.BasicConsumeMessage("", ОтветноеСообщение, 5) Тогда 
			Если КлиентКомпоненты.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения,1000) Тогда
				КлиентКомпоненты.BasicAck(ТегСообщения);
				Форма.ОтветноеСообщение = ОтветноеСообщение;
				ТекстСообщения = НСтр("ru='Сообщение успешно прочитано!'");
			Иначе
				Форма.ОтветноеСообщение = ОтветноеСообщение;
				ТекстСообщения = НСтр("ru='Очередь пустая!'");
			КонецЕсли;
			Сообщить(ТекстСообщения);
			
			// Обнуляем, чтобы избежать утечку памяти
			ОтветноеСообщение = "";
			ТегСообщения = 0;

			КлиентКомпоненты.BasicCancel("");
		Исключение
			ВызватьИсключение КлиентКомпоненты.GetLastError();
		КонецПопытки;
	Исключение
		СистемнаяОшибка = ОписаниеОшибки();
		ТекстСообщения = "Ошибка чтения сообщения!%СистемнаяОшибка%";
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СистемнаяОшибка%", СистемнаяОшибка);
		ВызватьИсключение ТекстСообщения;
	КонецПопытки;
	
КонецПроцедуры
Показать



В своей обработке использую цикл по вычитке сообщений по 1 штуке (попарно BasicConsumeMessage и BasicAck). При первой вычитке забирает из Rabbit хоть все 1000 сообщений. Такое ощущение, что при повторном использовании DeclareQueue или BasicConsume все ломается.
119. optimus12345 521 11.12.19 20:52 Сейчас в теме
(118)
Спасибо. Будем смотреть. Как способ обхода рекомендую заново инициализировать компоненту через Компонента = Новый ComОбъект() для отправки и получения сообщений
120. optimus12345 521 12.12.19 12:39 Сейчас в теме
(118) Ошибка не воспроизводится. Просьба написать полный сценарий воспроизведения на псевдокоде. Вот как я пытался вопроизвести. Обработка прикрепленная к статье устарела, не следует ее использовать.

Клиент. = Новый ComObject
Клиент.BasicConsume
Пока Клиент.BasicConsumeMessage Цикл
     Клиент.BasicAck
КонецЦикла
Клиент.BasicCancel
Клиент.BasicPublish // Ожидаю, что здесь зависнет или не отправиться сообщения. По факту все отправляется корректно
Показать
121. s0nya 14.12.19 18:42 Сейчас в теме
(120)
Привожу свою последовательность. На началло теста в очереде 30 сообщений. 64 битная версия dll. Если и дальше ошибку не видите могу выложить свою упрощенную до никуда обработку.

Клиент  = Новый("AddIn.BITERP.PinkRabbitMQ");
Клиент.Connect

//Отправка. Здесь никогда проблем не возникало
Клиент.DeclareQueue
Клиент.BasicPublish

//Получение. Первый раз все получает
Клиент.BasicConsume
Клиент.BasicConsumeMessage
Клиент.BasicAck
Клиент.BasicCancel

//Повторный запуск процедуры получения. Здесь уже ничего не получает 
Клиент.BasicConsume
Клиент.BasicConsumeMessage
Клиент.BasicAck
Клиент.BasicCancel

//Реинициализация компоненты
Клиент = Неопределено
Клиент  = Новый("AddIn.BITERP.PinkRabbitMQ");
Клиент.Connect

//Получение. Первый раз все снова получает
Клиент.BasicConsume
Клиент.BasicConsumeMessage
Клиент.BasicAck
Клиент.BasicCancel

//Повторный запуск процедуры получения. Здесь опять ничего нет 
Клиент.BasicConsume
Клиент.BasicConsumeMessage
Клиент.BasicAck
Клиент.BasicCancel



Показать
122. optimus12345 521 16.12.19 12:09 Сейчас в теме
Спасибо! Удалось воспроизвести баг. Завел задачу для релиза 1.8. https://github.com/BITERP/PinkRabbitMQ/issues/15
123. s0nya 16.12.19 15:34 Сейчас в теме
(122) Вам спасибо, за такую работу!
Жду решения, подписался в гитхабе ;)
Пока пользуюсь версией 1.2
124. optimus12345 521 31.12.19 14:17 Сейчас в теме
Опубликован новый релиз компоненты PRMQ 1.8 с поддержкой 64 битных Linux систем. https://github.com/BITERP/PinkRabbitMQ/releases. Просьба всех желающих проверить у себя, в особенности поддержку Linux части.
125. bforce 481 27.01.20 11:24 Сейчас в теме
Пробовали компоненту (в конце декабря). На наш взгляд, она еще сырая.
Отправка работает, но контроля доставки нет. Я отправляю в несуществующую точку обмена и это не приводит к ошибке или к выводу сообщения. Использование некоторых параметров приводит к неработоспособности.
Получение вообще не удалось протестировать.

В итоге, выбрали HTTP API, потому что там, хотя бы, можно анализировать код возврата HTTP и свойство routed в теле ответа.
126. optimus12345 521 27.01.20 11:44 Сейчас в теме
Насчет "Отправка работает, но контроля доставки нет." Так это не баг, а фича. См. п.2.2.3 официальной спецификации протокола amqp

https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf

2.2.3 No ConfirmationsA chatty protocol is slow. We use asynchronism heavily in those cases where performance is an issue. Thisis generally where we send content fr om one peer to another. We send off methods as fast as possible,without waiting for confirmations. Wh ere necessary, we implement windowing and throttling at a higher level, e.g. at the consumer level.We can dispense with confirmations because we adopt an assertion model for all actions. Either they succeed, or we have an exception that closes the channel or connection.There are no confirmations in AMQP. Success is silent, and failure is noisy. When applications needexplicit tracking of success and failure, they should use transactions.


Насчет неработоспособности в отдельных случаях - не отрицаем. Это надо смотреть. Было бы хорошо, если написали бы конкретнее.
127. bforce 481 27.01.20 13:16 Сейчас в теме
(126)
There are no confirmations in AMQP. Success is silent, and failure is noisy.

У меня последнее предложение и не выполняется.

(126)
Было бы хорошо, если написали бы конкретнее.

Скажите куда и как - напишу. Могу в том же github создать issue или на почту выслать примеры.
128. optimus12345 521 27.01.20 18:58 Сейчас в теме
(127)
Ну теперь стало понятнее требование. Желательно все ошибки овормлять в github репозитории проекта. Там они точно рано или поздно будут рассмотрены.
129. sandman.NN 07.02.20 00:13 Сейчас в теме
Ребятушки, а Линукс стоит того чтобы медленно и печально отправлять 50-100 сообщений в секунду? Я на коленке написал COM компоненту на шарпе за полдня. отправка 5000 сообщений в секунду, прём замерить не удалось, т.к. буферизацию впилил прямо в компоненту. При условии "получать пачками" по 100 за раз или всё, что есть у меня 1 получатель жрал все, что отправлялось с 10 отправителей (в 10 потоков)

PS Для пытливых умов. 1С отправляла кролику через COM компоненту.
130. Begemoth80 267 07.02.20 07:47 Сейчас в теме
(129) А какую задачу вы решали? Т.е. какие данные и зачем потребовалось отправлять из 1С в кролика со скоростью 5000 сообщений в секунду?
131. sandman.NN 07.02.20 07:55 Сейчас в теме
(130) я решал задачу замера производительности. А именно: Сколько времени занимает отправка одного сообщения. Для увеличения точности изменений, отправлял сообщения "кучей". Вы правильно отметили, что размер сообщения - имеет значение. Но по моим тестам, от 1 байта до 1 килобайта - на скорость не влияет.
132. Begemoth80 267 07.02.20 21:46 Сейчас в теме
(131) А какую задачу вы собирались решать? Т.е. у нас лежит задача ускорения выгрузки, вроде там понятно как делать, но мы ее уже 4 спринта откладываем, т.к. непонятно зачем. На всех наших проектах текущая скорость выгрузки не является узким местом (тем более, что ее можно делать в несколько потоков на стороне 1С).
133. sandman.NN 09.02.20 00:16 Сейчас в теме
(132) Я решал задачу доставки данных из ФЗ управляющего потока восстановления последовательности партионного учёта в обработку - интерфейс оператора. Сейчас реализовано таким образом, что наблюдать за процессом может более чем один оператор. Там валит поток порядка 80 сообщений/сек только исходящих из управляющего процесса (операции начала проведения и завершение проведения, постановка в очередь, перенос границы). В последовательности я провожу документы потоками (до 20 штук в раз)

Задействован менеджер потоков (тут где-то недалеко тема про него), который ещё и внутри себя данные гоняет крайне не эффективно (через хранилище общих настроек) Его в дальнейшем тоже переведу на "Крольчатину" чтобы не напрягать по чём зря базу и не упираться в блокировки. Таким образом поток данных только увеличится. Тратить на отправку одного сообщения 0.01 сек - непозволительная роскошь для моих задач.
134. Begemoth80 267 09.02.20 07:55 Сейчас в теме
(133) Спасибо за информацию
135. yufan 28.02.20 18:18 Сейчас в теме
Поставщик очереди предоставляет доступ к тестовому серверу через порты 45671 и 45672, к продуктовому через 5671.
Используя компоненту, получается установить соединение с тестовым сервером через порт 45672 (без TLS), но с теми же учётными данными не удаётся соединиться через 45671 порт к тестовому и 5671 к продуктовому серверу, получаю ошибку "Wrong login, password or vhost".
136. yufan 04.03.20 16:53 Сейчас в теме
(135) Похоже, в компоненте не реализована работа через TLS (5671).
И не планируется?
137. optimus12345 521 04.03.20 19:14 Сейчас в теме
(136)
Это нужно дорабатывать слой обмена через TCP с сервером RAbbitMQ. Создайте такую задачу здесь https://github.com/BITERP/PinkRabbitMQ/issues. Возможно кто-то возьмется за нее
139. s0nya 21.04.20 22:26 Сейчас в теме
В режиме работы в логах раббита постоянно предупреждение после отключения 1С. Это нормально?

2020-04-19 07:00:03.037 [warning] <0.794.427> closing AMQP connection <0.794.427>..................
client unexpectedly closed TCP connection
140. optimus12345 521 22.04.20 20:33 Сейчас в теме
Нет. Возможно внутри компоненты где-то ошибка при работе с соединением. Зарегал ошибку https://github.com/BITERP/PinkRabbitMQ/issues/26
141. vis_tmp 32 25.04.20 14:13 Сейчас в теме
Никак не могу найти, есть ли возможность для 7.7 использовать Rabbit MQ ?
142. Infactum 315 25.04.20 14:27 Сейчас в теме
(141) Есть, но не через эту компоненту.
Точно существует коммерческое решение. Возможно есть какие-то бесплатные. По сути, для 77 все делается через COM.
143. vis_tmp 32 25.04.20 17:50 Сейчас в теме
(142)Если вы знаете о них, не подскажете как найти?
144. specUT 23.06.20 12:36 Сейчас в теме
Метод GetPriority() не работает, всегда возвращает неопределено.
145. 13kawaii13 26.08.20 14:03 Сейчас в теме
Коллеги.

При работе с компонентой заканчивается место на диске C:\ сервера из-за переполнения папки temp

Судя по системам мониторинга, папка начала активно расти примерно с начала использования компоненты, и сейчас 1С корректно не очищает её, приходит удалять файлы вручную.

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

Подскажите как можно побороть это? Возможно ли как то програмно очищать временные файлы после завершения сеанса обмена ?
175. s0nya 07.06.21 00:22 Сейчас в теме
(145)
(145)
При работе с компонентой заканчивается место на диске C:\ сервера из-за переполнения папки temp

Судя по системам мониторинга, папка начала активно расти примерно с начала использования компоненты, и сейчас 1С корректно не очищает её, приходит удалять файлы вручную.

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

Подскажите как можно побороть это? Возможно ли как то програмно очищать временные файлы после завершения сеанса обмена ?


Аналогичная проблема. И такое ощущение, что возникла не сразу. Удалось решить?
146. optimus12345 521 26.08.20 17:16 Сейчас в теме
Компонента сама по себе никоим образом не работает с файловой системой машины. Что понимается под фразой "Все это складируется в темпе"?
147. 13kawaii13 27.08.20 15:15 Сейчас в теме
Тех журнал показывает что при подключении компоненты происходит загрузка компоненты в темп LoadComponent=C:/Users/User1c/AppData/Local/Temp/v8_59A_d7.tmp

8:23.852072-0,AddIn,2,process=rphost,p:processName=erp_bit_finance,OSThread=5332,t:clientID=166,t:applicationName=BackgroundJob,t:computerName=cl1-srv2,t:connectID=167,SessionID=76,Usr=DefUser,LoadComponent=C:/Users/User1c/AppData/Local/Temp/v8_59A_d7.tmp,Context='38:23.852072-0,AddIn,2,process=rphost,p:processName=erp_bit_finance,OSThread=5332,t:clientID=166,t:applicationName=BackgroundJob,t:computerName=cl1-srv2,t:connectID=167,SessionID=76,Usr=DefUser,LoadComponent=C:/Users/User1c/AppData/Local/Temp/v8_59A_d7.tmp,Context='ОбщийМодуль.RabbitMQ_Сервер.Модуль : 266 : КлиентКомпоненты = ПолучитьКомпонентуСервер(); ОбщийМодуль.RabbitMQ_Сервер.Модуль : 836 : ПодключитьКомпонентуСервер(); ОбщийМодуль.RabbitMQ_Сервер.Модуль : 861 : КомпонентаПодключена = ПодключитьВнешнююКомпоненту('
151. optimus12345 521 28.08.20 18:48 Сейчас в теме
(147)
Это какой-то платформенный механизм. Думаю он также работает и с другимим внешними компонентами
148. Kembreg 28.08.20 11:29 Сейчас в теме
Обработка, приложенная к статье не работает с версией компоненты 1.9, из-за изменившегося третьего параметра в BasicConsumeMessage, вместо timeout там теперь MessageTag. Плюс на Гите в Readme.md есть замечательные рекомендации, которым почему то не следуют авторы в самой обработке и наконец приводят её к рабочему виду, которую уже можно показывать начальству и говорить "а давай мы данные во внешнюю систему логирования будем так передавать"
optimus12345; +1 Ответить
149. Kembreg 28.08.20 13:28 Сейчас в теме
Попытки познать радость быстрого обмена на компоненте версии 1.9 пока ни к чему не привели.

Точки обмена создал, очереди связал. (листинг на Гите)
Попытка отправки и получения сообщения удивительно стабильна. Туда всё уходит, очередь при этом остается пустой.
Если используется листинг с сайта

Скрытый текст


то цикл беззастенчиво проскакивает, не заходя.

Если же убрать цикл и стукнуть просто

Клиент.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения, 5)
 Клиент.BasicAck(ТегСообщения);
  Сообщить("Успешно! Из очереди прочитано сообщение " + ОтветноеСообщение);
 


то на выходе получим радостное "Успешно! Из очереди прочитано сообщение" без всяких следов ответа

ЧЯДНТ?
150. optimus12345 521 28.08.20 18:11 Сейчас в теме
(149)
См метод BasicConsumeMessage - у метода стоит очень низкий таймаут в 5 мс. Его нужно увеличить хотя бы до 3000
152. Kembreg 28.08.20 19:14 Сейчас в теме
153. RIS2020 5 18.09.20 14:24 Сейчас в теме
{ВнешняяОбработка.ПростойПримерРаботыСКомпонентойPinkRabbitMQ.Форма.Форма.Форма(218)}: Ошибка при вызове метода контекста (Connect): Ошибка вызова метода внешней компоненты

Может обработку обновить стоит ?
154. optimus12345 521 18.09.20 19:08 Сейчас в теме
Не рекомендую вообщей ей пользоваться. Она написана не разработчиком компоненты. Рекомендую использовать примеры кода из репозитория https://github.com/BITERP/PinkRabbitMQ. Разработчик компоненты поддерживает эти примеры в актуальном состоянии
155. Kirill_Off 15.12.20 17:09 Сейчас в теме
Добрый день! Планируется ли реализовать работу с RPC? При публикации сообщения нужны свойства reply_to и correlation_id для возможности идентификации ответа от сервера по конкретному запросу. При работе с ответами вижу, что задел на обработку данного свойства уже сделан:
Если Клиент.CorrelationId <> "МОЙ_ИД" Тогда
156. optimus12345 521 15.12.20 18:24 Сейчас в теме
(155)
Свойства CorrelationId reply_to уже реализованы.(см док https://github.com/BITERP/PinkRabbitMQ) Если они не работают - то это ошибка. По поводу RPC не понял. Компонента работает только с 1С и ничем больше.
157. Kirill_Off 15.12.20 19:15 Сейчас в теме
Тогда я не понял, как задать CorrelationId и reply_to при BasicPublish. В описании не увидел.
Про RPC я имел ввиду, чтобы реализовать схему с Remote Procedure Call, когда мы шлем сообщение и ждем ответ от сервера. Как раз для этого и нужны reply_to - чтобы указать в какую очередь складывать ответы и CorrelationId - чтобы понять, что это ответ именно на наше сообщение.
158. optimus12345 521 15.12.20 20:10 Сейчас в теме
ПРимерно вот так
Компонента.CorrelationId = "myId"
Компонента.basicPublish()
Компонента.basicConsume()
Компонента.basicConsumeMessage()
Свойство = Компонента.CorrelationId
159. Kirill_Off 14.01.21 11:25 Сейчас в теме
Пытаюсь указать reply_to при отправке сообщения, но не вижу данного свойства и естественно вылетает ошибка.
С CorrelationId разобрался, там все отрабатывает.
Прикрепленные файлы:
160. optimus12345 521 14.01.21 12:16 Сейчас в теме
(159)
Старая версия компоненты 1.2 Сейчас актуальная - это 1.9. https://github.com/BITERP/PinkRabbitMQ/releases и почти уже вышла версия 1.10. с существенными изменениями, включая поддержку SSL. Рекомендую обновиться
161. Kirill_Off 14.01.21 12:54 Сейчас в теме
162. Morisato 15.01.21 12:27 Сейчас в теме
(140) Доброго времени суток! Столкнулся с подобной ошибкой. Логи сервера просто загаживаются подобной ошибкой.

client unexpectedly closed TCP connection

Подскажите пожалуйста, данная ошибка будет исправлена в 1.10 версии?
163. optimus12345 521 15.01.21 13:22 Сейчас в теме
(162) https://github.com/BITERP/PinkRabbitMQ/issues/26 такого нет в планах от основных контрибьютеров.
164. Morisato 20.01.21 10:59 Сейчас в теме
И снова здравствуйте!
Выполняю следующий код
ПодключитьВнешнююКомпоненту("ОбщийМакет.PinkRabbitMQ", "BITERP", ТипВнешнейКомпоненты.Native);
КлиентКомпоненты  = Новый("AddIn.BITERP.PinkRabbitMQ");

ТекстСообщения = "{test:test}";

Попытка
       КлиентКомпоненты.Connect(
		ВхСтруктура.Адрес,
		ВхСтруктура.Порт,
		ВхСтруктура.Логин,
		ВхСтруктура.Пароль,
		ВхСтруктура.ВиртуальныйХост);

     КлиентКомпоненты.ContentEncoding = "utf8";
     КлиентКомпоненты.ContentType = "application/json";
     КлиентКомпоненты.Expiration = "60000";

     КлиентКомпоненты.BasicPublish(
					ТочкаОбмена,
					ИмяОчереди,
					ТекстСообщения,
					0,
					Ложь);


Исключение
                СистемнаяОшибка = ОписаниеОшибки();
		ТекстСообщения = "Ошибка отправки сообщения!%СистемнаяОшибка%";
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СистемнаяОшибка%", СистемнаяОшибка); 		
		ВызватьИсключение ТекстСообщения+"_:"+КлиентКомпоненты.GetLastError(); 
КонецПопытки;

КлиентКомпоненты = Неопределено;

Показать

На стороне кролика очередь уже создана. Соединения происходят успешно. Сообщения передаются в очередь.
Но когда выполняется КлиентКомпоненты = Неопределено; то в логах кролика появляется ошибка

client unexpectedly closed TCP connection

Код выполняется на сервере в фоновой процедуре.
Что я делаю не так?
165. optimus12345 521 20.01.21 11:22 Сейчас в теме
(164)
Повоторюсь https://github.com/BITERP/PinkRabbitMQ/issues/26. Просто компонента неправильно закрывает соединение.
166. optimus12345 521 20.01.21 11:24 Сейчас в теме
Но спасибо за воспроизведение
167. Morisato 26.01.21 13:05 Сейчас в теме
Здравствуйте. Подскажите пожалуйста примерную дату выпуска компоненты версии 1.10. Спасибо.
168. optimus12345 521 26.01.21 13:53 Сейчас в теме
Точной даты нет, но тянуть с релизом не будем. Как только будет готовы запланированные задачи. Отслеживать прогресс можно здесь https://github.com/BITERP/PinkRabbitMQ/milestone/7
170. Begemoth80 267 02.03.21 12:05 Сейчас в теме
Мы выпустили новый релиз 1.10 компоненты PinkRabbitMQ. В релизе реализована поддержка TLS 1.2, на порядок увеличена скорость передачи сообщений, и выполнены другие доработки. Эту версию компоненты, в составе Адаптера, мы использовали на проекте, в рамках которого организован обмен между 100 базами в "реальном времени"

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

Основные доработки:
1. Поддержка TLS 1.2
-Теперь при обмене брокером можно использовать защищенный протокол
-Поддерживается проверка сертификата сервера при подключении (сертификат клиента для проверки сервером не передается)

2. На порядок увеличена скорость передачи сообщений
- Полностью переработана логика отправки сообщений. В результате скорость отправки увеличилась на 1-2 порядка
- При отправки сообщений используются “транзакции” rabbitmq, т.е. если уже в процессе отправки сообщения на сервере возникла ошибка, то в 1С вернется исключение

3. Ускорено получение первого сообщения с 1 секунды до “мгновенно”

4. Добавлена возможность создавать узлы обмена и очереди с нужными аргументами
- Можно создавать очереди с ограниченным временем жизни сообщений
- Можно создавать очереди с ограниченным временем жизни самих очередей

5. Добавлен метод для получения ключа маршрутизации сообщения

6. Исправлены ошибки, связанные с утечками памяти и падением компоненты, в редко-используемых сценариях
deevil; primat; +2 Ответить
171. пользователь 31.03.21 13:16
Сообщение было скрыто модератором.
...
172. MarolaConstantin 13.05.21 15:53 Сейчас в теме
Есть тут кто-то который разобрался с интеграцией 1С + RabbitMQ через эту компоненту?
Хочется обменятся опытом ну и заодно обсудить некие трудности с которым я столкнулся.
173. coolo 28.05.21 16:09 Сейчас в теме
А для каффки планируется нативная опенсурс компонента?
174. Begemoth80 267 28.05.21 19:31 Сейчас в теме
(173) Пока нет, но вроде платные есть
176. Shmell 533 11.08.21 06:50 Сейчас в теме
177. ssp_ 152 12.08.21 11:33 Сейчас в теме
Скачал демонстрационную обработку, смог отправить только пустые сообщения. Если в сообщении хотя бы один символ, говорит что "Сообщение успешно отправлено", но в очереди оно не появляется. Что делаю не так? Сервер RabbitMQ 3.8.20 Erlang 24.0.5
178. CrazyHands 37 15.09.21 13:15 Сейчас в теме
Добрый день. А BasicConsumeMessage так и не починили? Долго отрабатывает метод
Прикрепленные файлы:
179. optimus12345 521 15.09.21 14:55 Сейчас в теме
180. CrazyHands 37 15.09.21 15:35 Сейчас в теме
(179)
RTFM

Понимаю, что мой вопрос скорее всего вызвал негодование. :) Не могли бы вы в двух словах объяснить причину долгой работы метода?
В документации написано рекомендуемое значение таймаута - 3000. При этом, если я снижаю значение таймаута, метод отрабатывает быстрее. Буду признателен за помощь.
181. optimus12345 521 15.09.21 15:51 Сейчас в теме
(180)
Так и должно быть. Этот паттерн называет long-pooling и означает, что метод BasicConsumeMessage будет ждать появления сообщения в очереди именно столько, сколько Вы указали в таймауте. Если сообщений за этот таймаует не появилось, тот метод возвращает управление основному коду
Begemoth80; +1 Ответить
182. CrazyHands 37 15.09.21 19:08 Сейчас в теме
183. IvanGorbunov 12.10.21 12:01 Сейчас в теме
1) Если сообщения получать в цикле методом BasicConsumeMessage():
Пока Клиент.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения, 5000) Цикл
  ОтветноеСообщение = "";
  ТегСообщения = 0;
КонецЦикла;

, то читает только первое сообщение, а на второй итерации метода BasicConsumeMessage выбивает ошибку bad conversion. Что это может быть?

2) А есть возможность получать Timestamp из properties очереди? Я такой возможности не нахожу.
186. optimus12345 521 26.10.21 12:03 Сейчас в теме
(183)
1) Не сталкивался, не знаю
2) А такое свойство вроде и не реализовано
(184)
184. LexmanR 1 26.10.21 10:57 Сейчас в теме
Обработка PinkRabbitMQ
1.Соединение с локальным сервером Rabbit– соединение не проходит
2.Создали свой VHOST локальным сервером Rabbit – соединение не проходит
3.Развернули тестовый облачный сервер Rabbit размещен на cloudamqp.com – соединение проходит и сообщение отправлено в очередь
Тест на Python с с локальным сервером Rabbit
1. Скрипт на Python – соединение проходит и сообщение отправлено в очередь

Как итог могу сказать, что обработка работает только с облачным решением, с локальным кроликом по кокой-то причине не работает.
Не можем подключиться ни с помощью примера обработки, ни с помощью кода своей обработки
Прикрепленные файлы:
185. optimus12345 521 26.10.21 12:02 Сейчас в теме
Все там работает. И в облаке, и локально. Сам использую одну из последних версий компоненты для работы с локальным сервером RabbitMQ. Учите матчасть. Возможно права на vhost не предоставлены юзеру
user1687624; +1 Ответить
187. LexmanR 1 26.10.21 16:22 Сейчас в теме
(184)

Заработало.
Не верно указал порт при подключении. Вылетело из головы, что порты в оболочке и при подключении в коде разные у Rabbit.
191. MVOralov_new 21.02.22 10:34 Сейчас в теме
Добрый день, подскажите, пожалуйста - какие будущие планы по развитию PinkRabbit? Есть ли вероятность, и если да, то когда планируется следующее включение:
1) Протокол AMQP версии 1.x
2) Поддержка альтернативных брокеров - кроме RMQ - например - Red Hat A-MQ, ActiveMQ, Kafka

Спасибо!
194. Begemoth80 267 12.05.22 15:15 Сейчас в теме
(191)
> Протокол AMQP версии 1.x
Сразу, как только появится готовая клиентская библиотек на с или с++ с поддержкой, мы сразу поддержим (пока есть библиотеки на ГО, джаве и т.п.).

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


>Поддержка альтернативных брокеров - кроме RMQ - например - Red Hat A-MQ, ActiveMQ, Kafka
Это точно пока не планируем
192. msergeev79 9 10.05.22 20:37 Сейчас в теме
Добрый день!
Для мобильной платформы версии не планируется?
193. Begemoth80 267 12.05.22 15:11 Сейчас в теме
(192) Открытой пока не планируется, закрытая есть в составе продукта БИТ.МДТ
Вы в принципе можете работать с кроликом из мобильной платформы через http
195. NikeeNik 74 29.07.22 10:05 Сейчас в теме
В последней версии компоненты (2.1.1.141) у меня не работает метод BasicConsumeMessage(), почему-то в параметр messageTag всегда возвращает 0, поэтому сделать ack не получается, сообщения так и висят в очереди.
keyn5565`; +1 Ответить
196. NikeeNik 74 23.09.22 15:52 Сейчас в теме
(195) Заколебался, переписал на REST API
корум; keyn5565`; +2 Ответить
197. keyn5565` 18 26.10.22 14:56 Сейчас в теме
Добрый день!
Планируется ли исправление падения компоненты на linux?
198. Begemoth80 267 26.10.22 22:05 Сейчас в теме
(197) Ну мы ее активно используем ее на линуксе уже год, и не падает :-)
Т.е. возьмите свежую версию компоненты из репозитория, и опишите порядок воспроизведения проблемы
199. keyn5565` 18 27.10.22 16:08 Сейчас в теме
(198) Проверяли на самой свежей версии v2.1.1.141.
при подключении компоненты падает процесс rghost на сервере.
Особенно проявляется если использовать компоненту в несколько потоков.

падает при вызове:
ПодключитьВнешнююКомпоненту("ОбщийМакет.PinkRabbitMQ", "BITERP", ТипВнешнейКомпоненты.Native);


на Windosw сервере та же проблема, но только на актуальной версии компоненты

Как нам удалось выяснить, падение происходит если мы подключаем несколько экземпляров компоненты
Прикрепленные файлы:
200. Begemoth80 267 27.10.22 19:09 Сейчас в теме
(199) Да это известная проблема платформы, связанная с использованием одной и той же ВК в нескольких потоках на сервере.
Собственно по этому для последних версий мы собираем несколько одинаковых экземпляров компоненты с разным именем, для того, чтобы избежать падений нужно использовать в параллельных потоках разные экземпляры.

Скорее всего проблема решиться, на 21ой платформе если подключать компоненту в отдельном процессе (когда они поправят эту возможность)
keyn5565`; +1 Ответить
Оставьте свое сообщение