BITERP / PinkRabbitMQ

Внешняя Native API компонента для взаимодействия с RabbitMQ из 1С
MIT License
266 stars 107 forks source link

Ошибка при возникновении AMQP server timeout error #77

Open Pokshyvanov opened 2 years ago

Pokshyvanov commented 2 years ago

Если подключении компоненты и отправке в цикле сообщений, когда возникает ошибка от компоненты "AMQP server timeout error", то при КлиентКомпоненты = Неопределено, происходит перезапуск всего действия. Например, если выгрузка начата по кнопке - весь алгоритм команды кнопки начинается заново и, соответственно начинается вся выгрузка заново.

Процедура ОтправкаСообщений(ПараметрыПодключения, ТЗ)

Попытка
    КлиентКомпоненты = ПодключитьсяКRabbit(ПараметрыПодключения);
Исключение
    ВызватьИсключение ОписаниеОшибки();
КонецПопытки;

Для каждого стр из ТЗ Цикл
    КоличествоПопыток = 1;
    Пока КоличествоПопыток <= 3 Цикл
        Попытка
            ОтправитьСообщениеRabbit(ПараметрыПодключения, КлиентКомпоненты, стр.ТекстСообщения);
        Исключение
            ТекстОшибки = ОписаниеОшибки(); // Из GetLastError возвращается "AMQP server timeout error"
            Сообщить(ТекстОшибки);  
            КоличествоПопыток = КоличествоПопыток + 1;
            Продолжить;
        КонецПопытки;
    КонецЦикла;

    Если НЕ КоличествоПопыток <= 3 Тогда
        КлиентКомпоненты = Неопределено; // Если не получилось переотправить, после этой строки начинается алгоритм заново 
        ВызватьИсключение ТекстОшибки;
    КонецЕсли;

КонецЦикла;

КлиентКомпоненты = Неопределено; // Если получилось переотправить, начинается алгоритм заново       

КонецПроцедуры

AsseylumVA commented 2 years ago

При этом, если запущено фоновое задание и после "AMQP server timeout error" вызвать BasicCancel, то рабочий процесс сервера зависает.

johnnyshut commented 4 months ago

Есть какое-то решение? Или рекомендация как в таком случаи быть?

johnnyshut commented 3 months ago

Используем 8.3.24.1586 ошибка от компоненты "AMQP server timeout error" проявляла себя только при большом количестве ФЗ бит адаптера (Около 20). Пробовали заменить компоненту на версию 2.2.0.37, добавил все 27 компонент, чтобы каждое ФЗ юзало разные. В итоге: в сеансе фз компоненты просто перестали инициализироваться, при этом работал обмен из Тонкого клиента.

Итого: изменил код адаптера, чтобы обмен обрабатывался последовательно в одном фз. И проблема решилась.