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

98

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

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

5160 руб.

04.05.2018    49347    126    68    

70

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

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

5000 руб.

17.09.2018    38795    116    128    

119

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

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

14.01.2025    4406    bayselonarrend    14    

52

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

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

04.12.2024    8314    kovalevdmv    27    

82

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

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

19.02.2024    8583    starik-2005    38    

60

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

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

26.01.2024    9645    starik-2005    40    

49

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

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

22.11.2023    6787    132    ivan1703    26    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gybson 13.10.25 01:23 Сейчас в теме
немного поздно, в 1С вебсокеты сделали
2. krasnoshchekovpavel 146 13.10.25 20:22 Сейчас в теме
(1) Сделали, но никто еще не написал (или я не знаю об этом) библиотеку которая бы взаимодействовала по протоколу AMQP через сокеты
3. gybson 13.10.25 20:49 Сейчас в теме
(2) здесь публиковали уже
4. krasnoshchekovpavel 146 13.10.25 21:00 Сейчас в теме
5. krasnoshchekovpavel 146 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.
Для отправки сообщения требуется регистрация/авторизация