Skip to content

Компоненты не читает сообщения при повторном начале чтения в цикле #15

Description

@ripreal

Описание:
Если запустить последовательно в рамках одной сессии 2 цикла чтения сообщения, то второй цикл не прочитает ни одного сообщения, даже если они есть в очереди
Способ обхода:
Заново инициализировать компоненту при повторном чтении

Псевдокод:

Процедура ПрочитатьСообщениеКлиентСервер(КлиентКомпоненты, Форма)
    
    Попытка
        КлиентКомпоненты.Connect(
            Форма.Адрес,
            Форма.Порт,
            Форма.Логин,
            Форма.Пароль,
            Форма.ВиртуальныйХост);
        
        ИмяОчереди = Форма.ИмяОчереди;
        ТегСообщения = 0;
        
        Попытка
            КлиентКомпоненты.DeclareQueue(ИмяОчереди, Ложь, Ложь, Ложь, Ложь);
            
            Потребитель = КлиентКомпоненты.BasicConsume(ИмяОчереди, "", Истина, Ложь, 0);
            
            ОтветноеСообщение = "";
            
            //Если КлиентКомпоненты.BasicConsumeMessage("", ОтветноеСообщение, 5) Тогда 
            Если КлиентКомпоненты.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения,1000) Тогда
                КлиентКомпоненты.BasicAck(ТегСообщения);
                Форма.ОтветноеСообщение = ОтветноеСообщение;
                ТекстСообщения = НСтр("ru='Сообщение успешно прочитано!'");
            Иначе
                Форма.ОтветноеСообщение = ОтветноеСообщение;
                ТекстСообщения = НСтр("ru='Очередь пустая!'");
            КонецЕсли;
            Сообщить(ТекстСообщения);
            
            // Обнуляем, чтобы избежать утечку памяти
            ОтветноеСообщение = "";
            ТегСообщения = 0;

            КлиентКомпоненты.BasicCancel("");
        Исключение
            ВызватьИсключение КлиентКомпоненты.GetLastError();
        КонецПопытки;
    Исключение
        СистемнаяОшибка = ОписаниеОшибки();
        ТекстСообщения = "Ошибка чтения сообщения!%СистемнаяОшибка%";
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СистемнаяОшибка%", СистемнаяОшибка);
        ВызватьИсключение ТекстСообщения;
    КонецПопытки;
    
КонецПроцедуры

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions