Программный интерфейс для работы с внешней компонентой PinkRabbitMQ

10.10.25

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

Программный интерфейс для удобной работы с брокером сообщений RabbitMQ на основе внешней компоненты с открытым исходным кодом PinkRabbitMQ от BIT:ERP.

Введение

Работать с объектом внешней компонентой напрямую не всегда удобно, текущая библиотека OneRabbit является оберткой над внешней компонентой, сглаживающей неприятные углы программного интерфейса самой компоненты. OneRabbit содержит в себе реализацию всех методов, описанных в документации к внешней компоненте PinkRabbitMQ.

 

Основные фишки:

  • Подробные комментарии к каждому методу программного интерфейса, дополняющие документацию самой компоненты
  • Обертка всех вызовов компоненты в попытку, с пробросом исключений вверх, автоматически включая данные из метода компоненты GetLastError()
  • Чтение сообщений из очереди похоже на работу с Выборкой
  • Локализация свойств и методов на русский язык
  • При работе с компонентой с тонкого клиента вызов диалога с пользователем при необходимости установки внешней компоненты (реализация #std700 п. 1.1)
  • Единый модуль для работы как на клиенте так и на сервере. На клиентский и серверный модуль разнесены лишь процедуры подключения к серверу RabbitMQ для реализации вышестоящего пункта
  • Разработчику не нужно лезть в документацию к внешней компоненте, что бы понять какой параметр за что отвечает и что делает тот или иной метод - все описано в комментариях к методам программного интерфейса библиотеки
 
 Пример работы напрямую с внешней компонентой

 

&НаКлиенте
Процедура РаботаСКомпонентой()
	
	Если Не ПодключитьВнешнююКомпоненту("ОбщийМакет.PinkRabbitMQ", "PinkRabbitMQ", ТипВнешнейКомпоненты.Native) Тогда
		// Упрощенный вариант. Согласно #std700 нужно спрашивать пользователя, 
		// согласен ли он на установку внешней компоненты
		УстановитьВнешнююКомпоненту("ОбщийМакет.PinkRabbitMQ");
		ПодключитьВнешнююКомпоненту("ОбщийМакет.PinkRabbitMQ", "PinkRabbitMQ", ТипВнешнейКомпоненты.Native);
	КонецЕсли;
	
    КлиентRabbitMQ = Новый("AddIn.PinkRabbitMQ.PinkRabbitMQ");
	
	Попытка
    	КлиентRabbitMQ.Connect("127.0.0.1", 5672, "guest", "guest", "/");
	Исключение
		Сообщить(КлиентRabbitMQ.GetLastError());
		Возврат;
	КонецПопытки;
	
	ИдентификаторПотребителя = КлиентRabbitMQ.BasicConsume("queue_name", "", Ложь, Ложь, 100);
	ТелоСообщения = "";
	ИдентификаторСообщения = 0;
	Пока КлиентRabbitMQ.BasicConsumeMessage("", ТелоСообщения, ИдентификаторСообщения, 6000) Цикл
		
		Сообщить(ТелоСообщения);
		Сообщить(ИдентификаторСообщения);
		Сообщить(КлиентRabbitMQ.GetPriority());
		Сообщить(КлиентRabbitMQ.GetRoutingKey());
		Сообщить(КлиентRabbitMQ.GetHeaders());
		
		КлиентRabbitMQ.BasicAck(ИдентификаторСообщения);
		
		ОтветноеСообщение = ""; // Обнуляем, чтобы избежать утечку памяти (по документации компоненты)
		ИдентификаторСообщения = 0; // Обнуляем, чтобы избежать утечку памяти
	КонецЦикла;
	КлиентRabbitMQ.BasicCancel(ИдентификаторПотребителя);
	
КонецПроцедуры

 

 
 Пример работы с программным интерфейсом OneRabbit

 

&НаКлиенте
Процедура РаботаСОберткойНадКомпонентой()
	
	ПараметрыПодключения = rabКлиентСервер.ПараметрыПодключения();
	ПараметрыПодключения.Адрес = "127.0.0.1";
	ПараметрыПодключения.Порт = 5672;
	ПараметрыПодключения.ИмяПользователя = "guest";
	ПараметрыПодключения.Пароль = "guest";
	ПараметрыПодключения.ВиртуальныйХост = "/";
	
	Попытка
		// При необходимости установки внешней компоненты - автоматически 
		// задаст вопрос пользователю и вернет Неопределено
		КлиентRabbitMQ = rabКлиент.Подключиться(ПараметрыПодключения);
		Если КлиентRabbitMQ = Неопределено Тогда
			Возврат;
		КонецЕсли;
	Исключение
		Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат;
	КонецПопытки;
	
	ПараметрыЧтенияСообщений = rabКлиентСервер.ПараметрыЧтенияСообщений();
	ПараметрыЧтенияСообщений.Очередь = "queue_name";
	rabКлиентСервер.НачатьЧтениеСообщений(КлиентRabbitMQ, ПараметрыЧтенияСообщений);
	Пока rabКлиентСервер.СледующееСообщение(КлиентRabbitMQ) Цикл
		
		Сообщить(КлиентRabbitMQ.Сообщение.Тело);
		Сообщить(КлиентRabbitMQ.Сообщение.Идентификатор);
		Сообщить(КлиентRabbitMQ.Сообщение.Приоритет);
		Сообщить(КлиентRabbitMQ.Сообщение.КлючМаршрутизации);
		Сообщить(КлиентRabbitMQ.Сообщение.Заголовки);
		
		rabКлиентСервер.ПодтвердитьПолучение(КлиентRabbitMQ, КлиентRabbitMQ.Сообщение.Идентификатор);
	КонецЦикла;
	rabКлиентСервер.ЗавершитьЧтениеСообщений(КлиентRabbitMQ);
	
КонецПроцедуры

 

Более подробно о доступных методах библиотеки можно узнать на странице git репозитория github.com/KrasnoshchekovPavel/OneRabbit

 

Стоит отметить, что PinkRabbitMQ имеет недостатки в виде отсутствия некоторых методов и по объему своего функционала уступает Yellow RabbitMQ. Но надеюсь, что в будущем и OneRabbit и PinkRabbitMQ найдут своих любителей open-source проектов, и получив развитие смогут наравне конкурировать с более крупным, на текущий момент, проектами в данной области.

 

Технические детали

  • Разработано на платформе 8.3.27.1606
  • Режим совместимости 8.10
  • Поставка в виде cf и cfe файлов (релизы)
  • Внедрение в свою конфигурацию (расширение): сравнить-объединить, отметить по подсистеме OneRabbit

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Разработка внешних компонент Программист 1С v8.3 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

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

5000 руб.

12.05.2020    31590    143    100    

99

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

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

5160 руб.

04.05.2018    49624    127    68    

70

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    4921    bayselonarrend    14    

52

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

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    8942    kovalevdmv    28    

83

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

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

19.02.2024    9126    starik-2005    38    

60

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

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

26.01.2024    10139    starik-2005    40    

49

Инструментарий разработчика Разработка внешних компонент Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).

22.11.2023    7043    136    ivan1703    26    

43

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

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    4684    3    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gybson 13.10.25 01:23 Сейчас в теме
немного поздно, в 1С вебсокеты сделали
2. krasnoshchekovpavel 151 13.10.25 20:22 Сейчас в теме
(1) Сделали, но никто еще не написал (или я не знаю об этом) библиотеку которая бы взаимодействовала по протоколу AMQP через сокеты
3. gybson 13.10.25 20:49 Сейчас в теме
(2) здесь публиковали уже
4. krasnoshchekovpavel 151 13.10.25 21:00 Сейчас в теме
5. krasnoshchekovpavel 151 13.10.25 21:13 Сейчас в теме
(3) Если речь о данной статье https://infostart.ru/1c/articles/2425695/ то описывается работа с RabbitMQ по протоколу STOMP через обертку для WebSocket-ов (Плагин RabbitMQ "Web STOMP"). Использовать WebSocket-ы для работы по протоколу AMQP невозможно т.к. это несовместимые вещи. Поэтому если по каким-то причинам важен AMQP, а не STOMP или MQTT, то только внешние компоненты
6. gybson 13.10.25 22:14 Сейчас в теме
(5) Просто компонента имеет прям существенные недочеты с надежностью. Думаю нужен замер скорости. Скорость может быть важным фактором.

У нас то есть программный интерфейс для неё прям от авторов. Но местами используем HTTP, а в других местах yellow.
krasnoshchekovpavel; +1 Ответить
7. kuzyara 2202 15.10.25 05:46 Сейчас в теме
YellowRMQ ещё жива или уже всё?
8. krasnoshchekovpavel 151 15.10.25 10:23 Сейчас в теме
(7) Насколько я знаю Yellow RabbitMQ это активный продукт компании Silver Bulleters, закрытый, но актуальный, встречаю на проектах
9. Avatarzorro 62 21.10.25 10:52 Сейчас в теме
битовская компонента крайне дырявая. Имеет бесконечное количество проблем с утечеками памяти и просто критами в любой момент причины которых не знает даже сам бит и естесна они нигде не описаны.

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

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

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

И это не говоря о том, что у битовской компоненты есть ряд параметров, которые не используются, но передавать их надо. Зачем непонятно. Или функции, которые делаю то что надо, однако возвращают значение параметра который ты передал. Зачем это нужно не понятно. Такие вот они бесплатные решения
keyn5565`; krasnoshchekovpavel; +2 Ответить
10. krasnoshchekovpavel 151 21.10.25 15:28 Сейчас в теме
(9) Спасибо что описали все эти проблемы. С тех пор как была опубликована данная статья я все больше узнаю от людей реально пытающихся использовать эту компоненту на проектах о том, что в ней много проблем. Это все печально
11. Avatarzorro 62 22.10.25 01:55 Сейчас в теме
(10) если нужен кролик проще использовать самого кроля с веб плагином и весь обмен делать через него. Это стабильно и надежно хоть он и предназначен в первую очередь для администрирования.

Либо пробовать платную компоненту от пули. Говорят она нормально работает
Для отправки сообщения требуется регистрация/авторизация