Программный интерфейс для работы с внешней компонентой 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    32016    144    100    

100

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

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

5160 руб.

04.05.2018    50011    127    68    

71

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

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

5000 руб.

17.09.2018    39386    117    128    

120

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

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

14.01.2025    5266    bayselonarrend    16    

54

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

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

04.12.2024    9446    kovalevdmv    28    

83

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

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

19.02.2024    9536    starik-2005    38    

60

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

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

26.01.2024    10467    starik-2005    40    

49
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gybson 13.10.25 01:23 Сейчас в теме
немного поздно, в 1С вебсокеты сделали
2. krasnoshchekovpavel 155 13.10.25 20:22 Сейчас в теме
(1) Сделали, но никто еще не написал (или я не знаю об этом) библиотеку которая бы взаимодействовала по протоколу AMQP через сокеты
3. gybson 13.10.25 20:49 Сейчас в теме
(2) здесь публиковали уже
4. krasnoshchekovpavel 155 13.10.25 21:00 Сейчас в теме
5. krasnoshchekovpavel 155 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 Ответить
12. roman-gofman 02.11.25 00:41 Сейчас в теме
(5) Ну прям так и невозможно?)
Возможно через прокси https://github.com/cloudamqp/websocket-tcp-relay
в другом брокере LavinMQ и в коммерческом RabbitMQ, но протокол AMQP 1.0
Смысла в этом нет. Можно дождаться когда откроют мой доклад и заберете инструкцию как настроить RabbitMQ и демонстрационные базы с реализацией MQTT.
7. kuzyara 2210 15.10.25 05:46 Сейчас в теме
YellowRMQ ещё жива или уже всё?
8. krasnoshchekovpavel 155 15.10.25 10:23 Сейчас в теме
(7) Насколько я знаю Yellow RabbitMQ это активный продукт компании Silver Bulleters, закрытый, но актуальный, встречаю на проектах
9. Avatarzorro 64 21.10.25 10:52 Сейчас в теме
битовская компонента крайне дырявая. Имеет бесконечное количество проблем с утечеками памяти и просто критами в любой момент причины которых не знает даже сам бит и естесна они нигде не описаны.

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

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

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

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

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