Closed antonwantstosleep closed 4 years ago
Я дико извиняюсь - сначала спросил, а потом попробовал.
В доках не написано, но метод BasicConsumeMessage на самом деле возвращает Истину или Ложь (и переопределяет аргументы)..
=> компоненту нужно периодически подключать на клиенте (ПодключитьОбработчикОжидания) или на сервере (ФоновоеЗадание) и получать сообщения, верно? А потом "обнулять", как написано в доках?
А у вас нет мыслей переопределить логику - чтобы компонента сама читала сообщения и уведомляла о них 1С посредством ExternalEvent и ОбработатьВнешнееСобытие? Хотя бы на клиенте (вроде на сервере такая штука не работает)?
Компонента сама не разрывает сообщения и на клиенте она может работать в течение всего сеанса пользователя. Обнуление необходимо для того, чтобы в конце сеанса работы с компонентой очистить остатки использованной ей памяти, которые не могут быть очищены компонентой самостоятельно.
Внешние события не реализованы, т.к. они работают только на клиенте и у нас нет реальных сценариев, когда это может быть полезно. В целом это сделать просто.
Спасибо за замечание в части метода BasicConsumeMessage . Поправил описание
Компонента сама не разрывает сообщения и на клиенте она может работать в течение всего сеанса пользователя.
Если вы имели ввиду, что она сама не разрывает соединение - у меня разрывает (1.8 Linux x64). Если:
Внешние события не реализованы, т.к. они работают только на клиенте и у нас нет реальных сценариев, когда это может быть полезно.
Сценарий у меня вот какой.
В данный момент на клиенте у меня проблемы: прошу компоненту читать события через ПодключитьОбработчикОжидания() раз в 5 секунд. Пока она читает - интерфейс блокируется и подтормаживает.
Я понимаю, что в теории можно делать всё на сервере, а на клиентах через обработчик ожидания делать запросы к регистру сведений и, если нужно, выводить оповещения. Но хотелось сделать по принципу "каждому свое".
По поводу разрыва соединения посмотрю. Возможно есть какая-то ошибка в коде. По поводу ВнешнегоСобытия если есть ресурсы и желание - можно внести вклад в проект пулл-реквестом. Это реализовать несложно.Скажу даже больше. В мобильной версии данной компоненты (которая не выложена здесь) у нас вполне успешно используются внешние события для получения сообщений из RAbbitMQ.
А своими силами мы можем реализовать только те задачи по развитию компоненты, с которыми сталкиваемся на проектах наших клиентов. Похожей задачи у нас пока не было.
По поводу ВнешнегоСобытия если есть ресурсы и желание - можно внести вклад в проект пулл-реквестом. Это реализовать несложно.
Я бы с удовольствием, но C++ первый раз в жизни вижу. Вчера правил одну из вышеупомянутых библиотек wazo, чтобы сделать заголок сообщения более информативным.. нужно было сделать конкатенацию двух чаров - чуть Гугл не уничтожил своими тупыми вопросами (((
Поэтому быстрого пул реквеста от меня не ждите.
@antonwantstosleep, думаю, стоит начать с создания issue с кратким описанием работы этой фичи
@ovcharenko-di , я создал https://github.com/BITERP/PinkRabbitMQ/issues/23
Здравствуйте!
Пытаюсь разобраться, как правильно подписываться на очередь. Решаю задачу:
Я правильно понимаю, что в примере
показан бесконечный цикл чтения для поддержания соединения, поскольку сама компонента после вызова метода Connect() через некоторое время разрывает соединение? И мне нужно проверять ТекстСообщения на непустую строку и выполнять нужные мне действия?
Если да, то на сервере этот цикл следует поместить в ФоновоеЗадание, которое нужно один раз запустить, и пускай работает, верно?
А как на клиенте реализовать подобный цикл, чтобы не блокировать интерфейс? Я пока понял только как ПодключитьОбработчикОжидания, который раз в 10 секунд будет выполнять этот цикл (и выходить из него, если ТекстСообщения = "" после вызова метода BasicConsumeMessage).
Спасибо!