Введение
Работать с объектом внешней компонентой напрямую не всегда удобно, текущая библиотека 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(ИдентификаторПотребителя);
КонецПроцедуры
&НаКлиенте
Процедура РаботаСОберткойНадКомпонентой()
ПараметрыПодключения = 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
Вступайте в нашу телеграмм-группу Инфостарт