1С и RabbitMQ
Внешняя компонента для интеграции 1С и RabbitMQ удобным способом. Компонента работает под windows и linux. Основная логика написана на Rust, что сильно снижает риск утечек памяти. Есть бесплатная и платная версии.
🎞Видео обзор
Скачать можно 🔗по ссылке
Внешняя компонента для интеграции 1С и RabbitMQ удобным способом. Компонента работает под windows и linux. Основная логика написана на Rust, что сильно снижает риск утечек памяти. Есть бесплатная и платная версии.
🎞Видео обзор
Скачать можно 🔗по ссылке
1С и Apache kafka
Новая версия 0.9.1
Добавлена возможность указывать таймаут при получении сообщения. Если в течении этого таймаута не появится сообщение в топике, ожидание в функции
Сообщение = КлиентKafka.ПолучитьСообщение(Канал);
прервется.
Скачать можно 🔗по ссылке
Новая версия 0.9.1
Добавлена возможность указывать таймаут при получении сообщения. Если в течении этого таймаута не появится сообщение в топике, ожидание в функции
Сообщение = КлиентKafka.ПолучитьСообщение(Канал);
прервется.
Таймаут = 30;//сек.🎞Первый видео обзор
КонфигурацияПотребителя = КлиентKafka.КонфигурацияПотребителя(Топик, Теги, Таймаут);
Канал = КлиентKafka.НачатьПолучениеСообщений(КонфигурацияПотребителя);
Сообщение = КлиентKafka.ПолучитьСообщение(Канал);
Скачать можно 🔗по ссылке
👍1
1С и RabbitMQ
Новая версия 0.9.6
Добавлена возможность прерывать ожидание нового сообщения из очереди. Так как ожидание в функции КлиентRMQ.СледующееСообщение(Получатель) это блокирующее ожидание, т.к. оно блокирует поток выполнения 1С до момента когда в очереди появится сообщение, а иногда необходимо прервать ожидание, то можно использовать пару методов:
1. КлиентRMQ.ПолучитьСписокПолучателейСообщений() который вернет массив всех получателей и
2. КлиентRMQ.ОстановитьОжиданиеСообщения(Получение). Так же это можно делать интерактивно, через интерфейс обработки КлиентRMQ, там же можно посмотреть как это работает, для программного прерывания ожидания сообщения.
Подробнее 🎞в видео в комментарии
🔗Скачать
🎞Первый видео обзор
Новая версия 0.9.6
Добавлена возможность прерывать ожидание нового сообщения из очереди. Так как ожидание в функции КлиентRMQ.СледующееСообщение(Получатель) это блокирующее ожидание, т.к. оно блокирует поток выполнения 1С до момента когда в очереди появится сообщение, а иногда необходимо прервать ожидание, то можно использовать пару методов:
1. КлиентRMQ.ПолучитьСписокПолучателейСообщений() который вернет массив всех получателей и
2. КлиентRMQ.ОстановитьОжиданиеСообщения(Получение). Так же это можно делать интерактивно, через интерфейс обработки КлиентRMQ, там же можно посмотреть как это работает, для программного прерывания ожидания сообщения.
Подробнее 🎞в видео в комментарии
🔗Скачать
🎞Первый видео обзор
👍2
1С и Apache kafka
Новая версия 0.9.2
Добавлен метод ДобавитьТопикРазделИСмещение() для явного указания Топика, раздела и смещения, с которого начать чтение. Пример в демо конфигурации, в обработке ОжиданиеИОбработкаСообщенийСРучнымУправлениемСмещением.
🔗Скачать
Новая версия 0.9.2
Добавлен метод ДобавитьТопикРазделИСмещение() для явного указания Топика, раздела и смещения, с которого начать чтение. Пример в демо конфигурации, в обработке ОжиданиеИОбработкаСообщенийСРучнымУправлениемСмещением.
// Указывается явно с какого раздела и с какого смещения начать читать
// Если не требуется явно указывать номер раздела и смещение, а надо подписаться на топик полность
// и смещение будет запоминаться на сервере (через вызов КлиентKafka.СохранитьСмещение(Сообщение))
// то можно не исползовать этот метод, а указать топик в КлиентKafka.КонфигурацияПотребителя(Топик)
// Если топик указан через ДобавитьТопикРазделИСмещение, то настройки топика в КлиентKafka.КонфигурацияПотребителя(Топик) будет игнорироваться
КлиентKafka.ДобавитьТопикРазделИСмещение(КонфигурацияПотребителя, "1CRefs", 0, 2);
🔗Скачать
👍2
1С и RabbitMQ
Добавлена возможность использовать стандартные свойства сообщения (которые определяются самим протоколом AMQP):
Один из сценариев использования этих свойств — это реализация RPC через брокеры сообщений.
Общая концепция реализации RPC через RabbitMQ:
Предположим, что есть клиент и сервер; необходимо вызвать удаленные процедуры с клиента на сервере и вернуть результат (RPC).
1. Создается очередь, например,
2. Клиент отправляет запрос в эту очередь, например, для выполнения какого-либо расчета.
3. В сообщение клиент добавляет свойство
4. После отправки запроса клиент прослушивает очередь, указанную в свойстве
5. Сервер, получив сообщение с запросом из очереди rpc_queue, обрабатывает его и отправляет ответ в очередь, указанную в свойстве
6. Клиент получает ответ и обрабатывает его соответствующим образом.
Если необходимо связать запрос и ответ, то клиент может так же указать УИД запроса в свойстве
Заполнение и работа со свойствами на стороне клиента и сервера реализуется вручную, RMQ не вмешивается в этот процесс, он на уровне протокола AMQP предоставляет готовые свойства. Но есть свойства которые обрабатывает RMQ, н.п. если указать время жизни в свойстве
🔗Скачать новую версию
Общую концепцию так же можно почитать в туториале на сайте rmq
Добавлена возможность использовать стандартные свойства сообщения (которые определяются самим протоколом AMQP):
content_type
, content_encoding
, priority
, correlation_id
, reply_to
, expiration
, message_id
, timestamp
, type
, user_id
, app_id
, cluster_id
. Пример использования этих свойств в обработке ИспользованиеСвойствСообщений
.Один из сценариев использования этих свойств — это реализация RPC через брокеры сообщений.
Общая концепция реализации RPC через RabbitMQ:
Предположим, что есть клиент и сервер; необходимо вызвать удаленные процедуры с клиента на сервере и вернуть результат (RPC).
1. Создается очередь, например,
rpc_queue
, в которую будут поступать запросы от клиента и которую будет прослушивать сервер.2. Клиент отправляет запрос в эту очередь, например, для выполнения какого-либо расчета.
3. В сообщение клиент добавляет свойство
reply_to
с названием очереди, в которую сервер должен отправить ответ.4. После отправки запроса клиент прослушивает очередь, указанную в свойстве
reply_to
.5. Сервер, получив сообщение с запросом из очереди rpc_queue, обрабатывает его и отправляет ответ в очередь, указанную в свойстве
reply_to
(указанную клиентом).6. Клиент получает ответ и обрабатывает его соответствующим образом.
Если необходимо связать запрос и ответ, то клиент может так же указать УИД запроса в свойстве
correlation_id
, сервер в ответном сообщение скопирует это свойство, таким образом клиет будет знать на какой именно запрос ему ответил сервер.Заполнение и работа со свойствами на стороне клиента и сервера реализуется вручную, RMQ не вмешивается в этот процесс, он на уровне протокола AMQP предоставляет готовые свойства. Но есть свойства которые обрабатывает RMQ, н.п. если указать время жизни в свойстве
expiration
, то по истечении этого времени RMQ удалить сообщение из очереди.🔗Скачать новую версию
Общую концепцию так же можно почитать в туториале на сайте rmq
🔥3
1С и RabbitMQ
Добавлена возмжоность указывать флаги для потребителя:
no_ack Булево
Истина - автоматическое подтверждение получения сообщений
Ложь - требуется явное подтверждение получения каждого сообщения
exclusive Булево
Истина - только один получатель может быть подключен к очереди
Ложь - разрешено подключение нескольких получателей
no_local Булево
Истина - не получать сообщения, опубликованные через это же соединение
Ложь - получать все сообщения независимо от источника
nowait Булево
Истина - не ждать подтверждения от сервера при создании получателя
Свойства указываются в конструкторе потребителя
❗️Важно учитывать, что при установленном флаге no_ack сервер RMQ удаляет сообщение сразу после подключения consumer. Факт получения никак не отслеживается. Этот флаг нужно использовать только если потеря нескольких сообщений не критична. Например нужно отслеживать процесс доставки посылки. При отслеживании траектории доставки посылки не важно если потеряется одна контрольная точка, при следующем сообщении будет получена новая текущая координата.
‼️ Также оптимизирована работа внутренних механизмов компоненты (более оптимальная работа с внутренними потоками, поэтому рекомендую использовать последнюю версию)
🔗 Скачать новую версию
Добавлена возмжоность указывать флаги для потребителя:
no_ack Булево
Истина - автоматическое подтверждение получения сообщений
Ложь - требуется явное подтверждение получения каждого сообщения
exclusive Булево
Истина - только один получатель может быть подключен к очереди
Ложь - разрешено подключение нескольких получателей
no_local Булево
Истина - не получать сообщения, опубликованные через это же соединение
Ложь - получать все сообщения независимо от источника
nowait Булево
Истина - не ждать подтверждения от сервера при создании получателя
Свойства указываются в конструкторе потребителя
❗️Важно учитывать, что при установленном флаге no_ack сервер RMQ удаляет сообщение сразу после подключения consumer. Факт получения никак не отслеживается. Этот флаг нужно использовать только если потеря нескольких сообщений не критична. Например нужно отслеживать процесс доставки посылки. При отслеживании траектории доставки посылки не важно если потеряется одна контрольная точка, при следующем сообщении будет получена новая текущая координата.
Функция СоздатьПолучателя(Канал, ИмяОчереди, ТэгПолучателя = "", no_ack = Ложь, exclusive = Ложь, no_local = Ложь, nowait = Ложь) Экспорт
‼️ Также оптимизирована работа внутренних механизмов компоненты (более оптимальная работа с внутренними потоками, поэтому рекомендую использовать последнюю версию)
🔗 Скачать новую версию
👍1🔥1
1С и RabbitMQ
Изменен тип подключения компоненты для linux. Теперь для linux компонента так же подключается в изолированном режиме. В случае изолированного режима компонента работает в отдельном процессе addnhost64 (не в rphost как в случае не изолированного) и в случае ошибки не приведет к падению rphost.
🔗 Скачать
Изменен тип подключения компоненты для linux. Теперь для linux компонента так же подключается в изолированном режиме. В случае изолированного режима компонента работает в отдельном процессе addnhost64 (не в rphost как в случае не изолированного) и в случае ошибки не приведет к падению rphost.
🔗 Скачать
👍1
1С и RabbitMQ
Добавлена возможность указывать таймаут при ожидании новых сообщений в очереди. Таймаут указывается в параметрах получателя. Если ожидание прервано по таймауту будет такое сообщение с типом сообщения ServiceMessage. При получении сообщения тип будет Message, поэтому нужно сделать проверку, чтобы не учитывать сообщение о прерывании как сообщение из очереди.
🔗 Скачать
Добавлена возможность указывать таймаут при ожидании новых сообщений в очереди. Таймаут указывается в параметрах получателя. Если ожидание прервано по таймауту будет такое сообщение с типом сообщения ServiceMessage. При получении сообщения тип будет Message, поэтому нужно сделать проверку, чтобы не учитывать сообщение о прерывании как сообщение из очереди.
// Создать получателя, через которого будут получаться сообщения из очереди
Таймаут = 5; // таймаут при ожидании сообщения (в сек). Если = 0, таймаута нет.
Получатель = КлиентRMQ.СоздатьПолучателя(Канал, "node1", "ПолучательНоменклатуры",,,,,Таймаут);
🔗 Скачать
1С и RabbitMQ
Добавлена возможность указывать пользовательские заголовки для сообщений.
Пример в обработке ИспользованиеЗаголовковСообщений
При отправке
При получении
🔗Скачать
Добавлена возможность указывать пользовательские заголовки для сообщений.
Пример в обработке ИспользованиеЗаголовковСообщений
При отправке
Заголовки = КлиентRMQ.ДобавитьЗаголовок("Заголовок1", "ЗначениеЗаголовка1");
Заголовки = КлиентRMQ.ДобавитьЗаголовок("Заголовок2", "ЗначениеЗаголовка2", Заголовки);
Заголовки = КлиентRMQ.ДобавитьЗаголовок("Заголовок3", "ЗначениеЗаголовка3", Заголовки);
Ответ = КлиентRMQ.ОпубликоватьСообщение(Канал, Данные, "nomra", КлиентRMQ.Exchange_direct(),,,,Заголовки);
При получении
Для каждого текЗаголовок Из ДанныеСообщения.Заголовки Цикл
Сообщить(СтрШаблон("%1:%2", текЗаголовок.Ключ, текЗаголовок.Значение));
КонецЦикла;
🔗Скачать
👍1🔥1
1С и Apache kafka вер. 0.9.4
Обновлена библиотека rdkafka для rust (на которой основана компонента) до последней версии 0.37.0.
API компоненты не изменился.
Заметные изменения библиотеки rdkafka
🔗Скачать
Обновлена библиотека rdkafka для rust (на которой основана компонента) до последней версии 0.37.0.
API компоненты не изменился.
Заметные изменения библиотеки rdkafka
Версия 0.36.0 (2023-11-08):
Переход на Event API вместо Callback API: Это крупное изменение внутренней архитектуры, может повлиять на стабильность и производительность кода.
🔗Скачать
1С и Apache kafka вер. 0.9.5
Исправлена ошибка. Если ожидание сообщений остановлено по таймауту (что автоматически закрывает канал) и потом попытаться закрыть канал еще раз методом ЗакрытьКаналПотребителя() (он уже закрыт по таймауту) то было зависание на методе ЗакрытьКаналПотребителя(). Сейчас отработает корректно, если закрыть канал после срабатывания таймаута, вернется "Канал не найден"
🔗 Скачать
🔗 Договор оферты (для платной версии)
Исправлена ошибка. Если ожидание сообщений остановлено по таймауту (что автоматически закрывает канал) и потом попытаться закрыть канал еще раз методом ЗакрытьКаналПотребителя() (он уже закрыт по таймауту) то было зависание на методе ЗакрытьКаналПотребителя(). Сейчас отработает корректно, если закрыть канал после срабатывания таймаута, вернется "Канал не найден"
🔗 Скачать
🔗 Договор оферты (для платной версии)
👍3
Для компонент rabbitMQ и kafka добавлена справка по решению проблем с подключением компоненты
Для просмотра справки нужно открыть обработку КлиентKafka/КлиентRMQ и нажать F1.
🔗Скачать rabbitMQ 0.9.89
🔗Скачать kafka 0.9.51
Ниже справка для rabbitMQ, для kafka все полностью аналогично.
❗️Проблемы при подключения компоненты. Исправление и определение причины ошибки.
Речь идет о ситуации, когда при подключении компоненты возвращается ошибка "Ошибка подключения внешней компоненты".
🔹Для windows
Основная проблема подключения компоненты в windows это отсутствие установленных библиотек нужных компоненте для работы.
Для работы компоненты в windows необходимо чтобы на компьютере где подключается компонента был установлен Microsoft Visual C++ Redistributable.
Скачать можно с официального сайта по ссылке
Так же важно учесть где именно подключается компонента, если используется серверная версия 1С, то Microsoft Visual C++ Redistributable должен быть установлен на сервере 1С (не на клиенте).
Если после установки Microsoft Visual C++ Redistributable проблема подключения осталась, нужно узнать каких именно зависимостей не хватает.
Посмотреть можно через приложение Dependencies (ссылка на github, скачать в разделе релизы)
И выполнить следующие действия:
1. Щелкнуть по макету windows в обработке КлиентRMQ, нажать "Выгрузить в файл" и сохранить под любым именем с расширением dll н.п. RMQ.dll
2. Распаковать скаченный архив приложения Dependencies и запустить приложение DependenciesGui.exe
3. На открывшееся окно перетащить файл RMQ.dll сохраненный на шаге 1.
Приложение покажет все зависимости (другие динамические библиотеки нужные компоненте), если каких-то библиотек не обнаружено на ПК, они будут отображены с красной пиктограммой.
Как на картинке. Это как раз библиотеки которые можно установить через установку Microsoft Visual C++ Redistributable.
Других не достающих зависимостей быть не должно, но если так произошло, можно поискать по названию этих библиотек в интернете или написать в телеграмм https://t.me/kovalevdmv
🔹Для Linux
Основная проблема подключения компоненты в linux это отсутствие установленных библиотек или их версий, нужных компоненте для работы.
Простой способ определить каких библиотек или их версий не хватает - использовать консольную утилиту ldd.
Для этого нужно сделать следующее:
1. Щелкнуть по макету linux в обработке КлиентRMQ, нажать "Выгрузить в файл" и сохранить под любым именем с расширением so н.п. RMQ .so
2. Выполнить в консоли (указывается файл сохраненный на шаге 1)
ldd ./RMQ.so
Если есть проблемы с зависимостями, в консоль будет выведено not found и имя зависимости.
Такими проблемами могут быть н.п. старые версии библиотек.
На практике проблемы встречались только на старых дистрибутивах, использующих устаревшие библиотеки.
Самое простое решение - использовать более новые версии дистрибутивов.
Для просмотра справки нужно открыть обработку КлиентKafka/КлиентRMQ и нажать F1.
🔗Скачать rabbitMQ 0.9.89
🔗Скачать kafka 0.9.51
Ниже справка для rabbitMQ, для kafka все полностью аналогично.
❗️Проблемы при подключения компоненты. Исправление и определение причины ошибки.
Речь идет о ситуации, когда при подключении компоненты возвращается ошибка "Ошибка подключения внешней компоненты".
🔹Для windows
Основная проблема подключения компоненты в windows это отсутствие установленных библиотек нужных компоненте для работы.
Для работы компоненты в windows необходимо чтобы на компьютере где подключается компонента был установлен Microsoft Visual C++ Redistributable.
Скачать можно с официального сайта по ссылке
Так же важно учесть где именно подключается компонента, если используется серверная версия 1С, то Microsoft Visual C++ Redistributable должен быть установлен на сервере 1С (не на клиенте).
Если после установки Microsoft Visual C++ Redistributable проблема подключения осталась, нужно узнать каких именно зависимостей не хватает.
Посмотреть можно через приложение Dependencies (ссылка на github, скачать в разделе релизы)
И выполнить следующие действия:
1. Щелкнуть по макету windows в обработке КлиентRMQ, нажать "Выгрузить в файл" и сохранить под любым именем с расширением dll н.п. RMQ.dll
2. Распаковать скаченный архив приложения Dependencies и запустить приложение DependenciesGui.exe
3. На открывшееся окно перетащить файл RMQ.dll сохраненный на шаге 1.
Приложение покажет все зависимости (другие динамические библиотеки нужные компоненте), если каких-то библиотек не обнаружено на ПК, они будут отображены с красной пиктограммой.
Как на картинке. Это как раз библиотеки которые можно установить через установку Microsoft Visual C++ Redistributable.
Других не достающих зависимостей быть не должно, но если так произошло, можно поискать по названию этих библиотек в интернете или написать в телеграмм https://t.me/kovalevdmv
🔹Для Linux
Основная проблема подключения компоненты в linux это отсутствие установленных библиотек или их версий, нужных компоненте для работы.
Простой способ определить каких библиотек или их версий не хватает - использовать консольную утилиту ldd.
Для этого нужно сделать следующее:
1. Щелкнуть по макету linux в обработке КлиентRMQ, нажать "Выгрузить в файл" и сохранить под любым именем с расширением so н.п. RMQ .so
2. Выполнить в консоли (указывается файл сохраненный на шаге 1)
ldd ./RMQ.so
Если есть проблемы с зависимостями, в консоль будет выведено not found и имя зависимости.
Такими проблемами могут быть н.п. старые версии библиотек.
На практике проблемы встречались только на старых дистрибутивах, использующих устаревшие библиотеки.
Самое простое решение - использовать более новые версии дистрибутивов.
👍4❤2
1С и RabbitMQ вер. 0.9.90
Добавлен метод ОтклонитьСообщение() и возможность чтения заголовка сообщения x-death.
Сценарий где это можно применить:
Например необходимо иметь возможность отклонить сообщение, но не просто НЕ подтвердить, а сообщение должно автоматически переместиться в мертвую очередь, где будут находится сообщения, которые не возможно обработать. При этом, при чтении этого сообщения из мертвой очереди, сервер RMQ добавит к сообщению заголовок x-death где будет информация о том из какой очереди оно переместилось в мертвую (после отклонения) и сколько раз (и прочая информация). Чтобы сообщение автоматически перемещалось в мертвую очередь, в настройках исходной очереди нужно в аргументе x-dead-letter-exchange указать точку обмена. Подробнее этот сценарий описан в 🔗справке в обработке ПримерОтклоненияСообщений в демо конфигурации. При этом сообщение при отклонении может так же вернуть и в исходную очередь. За это поведение отвечает параметр ВернутьВИсходнуюОчередь в методе ОтклонитьСообщение(). Если ВернутьВИсходнуюОчередь=Истина, то сообщение вернется в исходную очередь. Если ВернутьВИсходнуюОчередь=Ложь, то: если для исходной очереди не указан аргумент x-dead-letter-exchange, то удалится, если указан, то переместится в мертвую очередь.
🔗 Скачать
🔗 Договор оферты (для платной версии)
Добавлен метод ОтклонитьСообщение() и возможность чтения заголовка сообщения x-death.
Сценарий где это можно применить:
Например необходимо иметь возможность отклонить сообщение, но не просто НЕ подтвердить, а сообщение должно автоматически переместиться в мертвую очередь, где будут находится сообщения, которые не возможно обработать. При этом, при чтении этого сообщения из мертвой очереди, сервер RMQ добавит к сообщению заголовок x-death где будет информация о том из какой очереди оно переместилось в мертвую (после отклонения) и сколько раз (и прочая информация). Чтобы сообщение автоматически перемещалось в мертвую очередь, в настройках исходной очереди нужно в аргументе x-dead-letter-exchange указать точку обмена. Подробнее этот сценарий описан в 🔗справке в обработке ПримерОтклоненияСообщений в демо конфигурации. При этом сообщение при отклонении может так же вернуть и в исходную очередь. За это поведение отвечает параметр ВернутьВИсходнуюОчередь в методе ОтклонитьСообщение(). Если ВернутьВИсходнуюОчередь=Истина, то сообщение вернется в исходную очередь. Если ВернутьВИсходнуюОчередь=Ложь, то: если для исходной очереди не указан аргумент x-dead-letter-exchange, то удалится, если указан, то переместится в мертвую очередь.
🔗 Скачать
🔗 Договор оферты (для платной версии)
🔥2
1С и RabbitMQ вер. 0.9.91
Добавлена возможность указывать аргументы для очередей и потребителей. Через аргументы можно делать более гибкую настройку. В обработке РаботаСОчередямиТипаStream пример как через указание агрумента "x-queue-type" работать с очередями как с потоками (stream) аналогично как в apache kafka. Про возможные аргументы для очередей и потребителей (comsumers) можно почитать на офф сайте RMQ https://www.rabbitmq.com/docs/use-rabbitmq
Пример с стайта (объявление очереди и указание для нее аргументов):
В данным случае arguments из примера будет указыватья аналогично для компоненты
Аналогично любые другие аргументы. Аргументы это пара ключ/значение. Подробнее в примере Обработка.РаботаСОчередямиТипаStream
Так же добавлена возможность указывать для канала количество предзагруженных не подтвержденных сообщений.
Это полезно если в очереди очень много сообщений. а клиент обрабатывает их медленно. Тогда для экономии памяти на клиенте можно указать н.п.
Тогда RMQ сервер будет слать только 10 не подтвержденных сообщений. И после подтверждения будет присылать новые. Если сообщения не подтверждать, то сервер не будет присылать сообщения. Поэтому если нужно обработать все сообщения без подтверждения, этот параметр не нужно использовать.
Так же он необходим для работы с очередями в режиме потока (Strem) без установки этого параметра RMQ сервер не разрешит установить соединение с очередью типа Stream, так как поток не очищаются и хранит все сообщения (модель работы как в kafka) и если не указать размер сообщений, серверу пришлось бы прислать все сообщения которые накопились в потоке.
🔗 Скачать
🔗 Договор оферты (для платной версии)
Добавлена возможность указывать аргументы для очередей и потребителей. Через аргументы можно делать более гибкую настройку. В обработке РаботаСОчередямиТипаStream пример как через указание агрумента "x-queue-type" работать с очередями как с потоками (stream) аналогично как в apache kafka. Про возможные аргументы для очередей и потребителей (comsumers) можно почитать на офф сайте RMQ https://www.rabbitmq.com/docs/use-rabbitmq
Пример с стайта (объявление очереди и указание для нее аргументов):
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-queue-type", "stream");
// maximum stream size: 20 GB
arguments.put("x-max-length-bytes", 20_000_000_000);
// size of segment files: 100 MB
arguments.put("x-stream-max-segment-size-bytes", 100_000_000);
// size of stream bloom filter: 32
arguments.put("x-stream-filter-size-bytes", 32);
channel.queueDeclare(
"my-stream",
true, // durable
false, false, // not exclusive, not auto-delete
arguments
);
В данным случае arguments из примера будет указыватья аналогично для компоненты
АргументыОчереди = Новый Массив;
АргументыОчереди.Добавить(КлиентRMQ.НовыйАргумент("x-queue-type","stream"));
Очередь = КлиентRMQ.ОбъявитьОчередь(Канал, "node1", "nomra", КлиентRMQ.Exchange_direct(), Истина,,,АргументыОчереди);
Аналогично любые другие аргументы. Аргументы это пара ключ/значение. Подробнее в примере Обработка.РаботаСОчередямиТипаStream
Так же добавлена возможность указывать для канала количество предзагруженных не подтвержденных сообщений.
Это полезно если в очереди очень много сообщений. а клиент обрабатывает их медленно. Тогда для экономии памяти на клиенте можно указать н.п.
КоличествоПредзагруженныхНеПодтвержденныхСообщений = 10;
Канал = КлиентRMQ.СоздатьКанал(Подключение,,КоличествоПредзагруженныхНеПодтвержденныхСообщений);
Тогда RMQ сервер будет слать только 10 не подтвержденных сообщений. И после подтверждения будет присылать новые. Если сообщения не подтверждать, то сервер не будет присылать сообщения. Поэтому если нужно обработать все сообщения без подтверждения, этот параметр не нужно использовать.
Так же он необходим для работы с очередями в режиме потока (Strem) без установки этого параметра RMQ сервер не разрешит установить соединение с очередью типа Stream, так как поток не очищаются и хранит все сообщения (модель работы как в kafka) и если не указать размер сообщений, серверу пришлось бы прислать все сообщения которые накопились в потоке.
🔗 Скачать
🔗 Договор оферты (для платной версии)
RabbitMQ вер. 0.9.92
1. Добавлена возможность сжимать отправляемое сообщение. Поддерживаемые алгоритмы: zstd и gzip. Если указано сжатие, то при создании сообщения в свойства сообщения будет добавлено свойство content_encoding равное указанному алгоритму сжатия. Далее на основании этого заголовка будет реализована распаковка (см. пункт ниже). Пример в обработке ОтправкаПолучениеСжатыхСообщений в демо конфигурации.
Для создание настроек нужно использовать метод КлиентRMQ.НастройкиСжатия() с указанием алгоритма сжатия и уровня сжатия. Далее настройки нужно передать в метод КлиентRMQ.ОпубликоватьСообщение()
2. Добавлена функция автоматической распаковки для сжатого сообщения. Поддерживается zstd и gzip (лучше использовать zstd, так как он намного эффективнее чем gzip ).
Если у сообщения в Properties есть свойство content_encoding равное gzip или zstd, то содержимое будет автоматически распаковано на уровне компоненты. Пример в обработке ОтправкаПолучениеСжатыхСообщений в демо конфигурации.
3. Добавлена возможность логирования для отладки работы компоненты. Для этого нужно в метод КлиентRMQ.ЗаписьЛога("C:\tmp\лог_rmq.txt") передать путь к файлу лога.
4. Доработки по оптимизации многопоточной работы (параллельный запуск нескольких rmq клиентов)
5. Исправлено аварийное завершение в файловом варианте (иногда из-за не завершенного рантайма rust в файловом варианте могло был аварийное завершение работы компоненты)
6. Добавлена возможность пинговать компоненту, когда она находится в режиме ожидания, в фоновом задании, для контроля здоровья.
Общая логика: через регл задание отправить "ping" и обрабатывать сервисный ответ "pong" в цикле получения сообщение из очереди (pong приходит как сообщение, только с типом "Сервисное")
см. реализации регл. задания МониторингRMQ и фрагмента кода "Если КлиентRMQ.ЭтоОтветНаПинг(ДанныеСообщения) Тогда" в общем модуле ОбработкаСообщенийВФоне.ОжиданиеИОбработкаСообщенийНоменклатуры() демо конфигурации.
Важно! при использовании таймаута, нужно учитывать что ping будет восприниматься как получение сообщение, поэтому таймаут после получения сообщения из очереди ping будет начинать отсчет сначала. То есть, если ping делать чаще чем таймаут, то тамаут никогда не сработает. ping должен быть реже чем интервал таймаута.
🔗 Скачать
🔗 Договор оферты (для платной версии)
🔗 Лендинг
1. Добавлена возможность сжимать отправляемое сообщение. Поддерживаемые алгоритмы: zstd и gzip. Если указано сжатие, то при создании сообщения в свойства сообщения будет добавлено свойство content_encoding равное указанному алгоритму сжатия. Далее на основании этого заголовка будет реализована распаковка (см. пункт ниже). Пример в обработке ОтправкаПолучениеСжатыхСообщений в демо конфигурации.
НастройкиСжатия = КлиентRMQ.НастройкиСжатия("zstd");
Ответ = КлиентRMQ.ОпубликоватьСообщение(Канал, Данные, "nomra", КлиентRMQ.Exchange_direct(),,,,,НастройкиСжатия);
Для создание настроек нужно использовать метод КлиентRMQ.НастройкиСжатия() с указанием алгоритма сжатия и уровня сжатия. Далее настройки нужно передать в метод КлиентRMQ.ОпубликоватьСообщение()
2. Добавлена функция автоматической распаковки для сжатого сообщения. Поддерживается zstd и gzip (лучше использовать zstd, так как он намного эффективнее чем gzip ).
Если у сообщения в Properties есть свойство content_encoding равное gzip или zstd, то содержимое будет автоматически распаковано на уровне компоненты. Пример в обработке ОтправкаПолучениеСжатыхСообщений в демо конфигурации.
3. Добавлена возможность логирования для отладки работы компоненты. Для этого нужно в метод КлиентRMQ.ЗаписьЛога("C:\tmp\лог_rmq.txt") передать путь к файлу лога.
4. Доработки по оптимизации многопоточной работы (параллельный запуск нескольких rmq клиентов)
5. Исправлено аварийное завершение в файловом варианте (иногда из-за не завершенного рантайма rust в файловом варианте могло был аварийное завершение работы компоненты)
6. Добавлена возможность пинговать компоненту, когда она находится в режиме ожидания, в фоновом задании, для контроля здоровья.
Общая логика: через регл задание отправить "ping" и обрабатывать сервисный ответ "pong" в цикле получения сообщение из очереди (pong приходит как сообщение, только с типом "Сервисное")
см. реализации регл. задания МониторингRMQ и фрагмента кода "Если КлиентRMQ.ЭтоОтветНаПинг(ДанныеСообщения) Тогда" в общем модуле ОбработкаСообщенийВФоне.ОжиданиеИОбработкаСообщенийНоменклатуры() демо конфигурации.
Важно! при использовании таймаута, нужно учитывать что ping будет восприниматься как получение сообщение, поэтому таймаут после получения сообщения из очереди ping будет начинать отсчет сначала. То есть, если ping делать чаще чем таймаут, то тамаут никогда не сработает. ping должен быть реже чем интервал таймаута.
🔗 Скачать
🔗 Договор оферты (для платной версии)
🔗 Лендинг
🔥3
Добрый день!
В последних версия платформы разработчики 1С что-то поломали в механизме внешних компонент (именно в изолированном режиме). При передаче больших данных (строки примерно выше 120 000 символов) платформа выдает ошибку и не вызывает метод внешней компоненты.
Ошибки в версиях:
8.3.25.1633
8.3.26.1656
8.3.27.1644
Это последние версии в каждой ветке на сегодняшний день.
На крайний случай есть механизм обхода, это передавать данные по частям, он реализован для linux (там это проблема уже давно). Пока не буду тратить время на костыльный обход для windows. Возможно починят в будущих версиях. Если ошибка будет стабильно переходить в будущие версии, придется добавить передачу по частям, что немного замедлит передачу данных.
Для не больших строк (до 100 000 символов) по моим экспериментам проблема не наблюдается.
upd: 19.07.2025
Недавно всплыл еще одни косяк разработчиков платформы. Поломали работу с двоичными данными (наблюдается в версии 8.3.27.1644). см. тут
🔗 Лендинг
В последних версия платформы разработчики 1С что-то поломали в механизме внешних компонент (именно в изолированном режиме). При передаче больших данных (строки примерно выше 120 000 символов) платформа выдает ошибку и не вызывает метод внешней компоненты.
Ошибки в версиях:
8.3.25.1633
8.3.26.1656
8.3.27.1644
Это последние версии в каждой ветке на сегодняшний день.
На крайний случай есть механизм обхода, это передавать данные по частям, он реализован для linux (там это проблема уже давно). Пока не буду тратить время на костыльный обход для windows. Возможно починят в будущих версиях. Если ошибка будет стабильно переходить в будущие версии, придется добавить передачу по частям, что немного замедлит передачу данных.
Для не больших строк (до 100 000 символов) по моим экспериментам проблема не наблюдается.
upd: 19.07.2025
Недавно всплыл еще одни косяк разработчиков платформы. Поломали работу с двоичными данными (наблюдается в версии 8.3.27.1644). см. тут
🔗 Лендинг
kovalevdmv.github.io
1C Tools - Внешние компоненты для 1С
Профессиональные внешние компоненты для 1С:Предприятие. RabbitMQ и Apache Kafka интеграции.
👍6