Здравствуйте. Никто не встречал такое? External Task 7.16 работает в контейнере OpenShift работает, может месяц, может неделю. Потом раз и не работает. Поток TopicSubscriptionManager вроде бы есть, но linux показывает, что он sleep. Соответственно, там внутри крутится бесконечный цикл, который вычитывает с engine работу и исполняет ее. Так вот по логам получается, что он перестает работать. И все. Все процессы замирают. Не пойму, куда копать. помогите, пожалуйста.
Здравствуйте!
Каким образом реализовали External Task Client?
Здравствуйте. Немного не понял вопроса. Стартует спринг-бут приложение с зависимостью Exterrnal Task. У него настройки на ноду с Engine. При старте, стартует в потоке TopicSubscriptionManager - по сути дела обработчик. Как видно из логов, он запускает бесконечный цикл и в у меня в трейс логи падает что-то подобное несколько раз в секунду. Это означает, что он работает в штатном режиме и исполнение процессов идет нормально - воркер работает.
TASK/CLIENT-03008 Fetch and lock new external tasks for 82 topics
Проходит какое-то время - несколько дней, недель - нода не рестартуется, все работает.
Вдруг, ни ч того, ни с сего в логи перестает писаться это:
TASK/CLIENT-03008 Fetch and lock new external tasks for 82 topics
В логах плюс-минус ничего серьезного не происходит - нет ошибок, ничего. Просто в какое-то время последний вызов
TASK/CLIENT-03008 Fetch and lock new external tasks for 82 topics и тишина. Нода сама работает - рест контроллеры доступны и отвечают. Что-то происходит с потоком именно TopicSubscriptionManager.
Процессы все перестают исполняться.
Рестарт ноды решает проблему и так до следующего раза.
Зацепиться мне не за что пока. Понимаю, что это пальцем в небо, но может кто-то сталкивался.
У нас настроены автотесты и 4 раза в день как минимум одно и тоже прогоняется по стенду. Т.е. те же процессы, те же таски работают.
Может линукс что-то с потоком делает?
Или я не понимаю, как можно диагностировать, что происходит с потоком. top -H дает, что поток жив
В общем, я почти наверняка нашел причину по логам. Завтра узнаю точнее у разработчика, сейчас уже поздновато.
Еще хотел спросить - я не нашел, как можно сделать несколько потоков исполнения. А то получается, что сейчас исполняется только в одном потоке TopicSubscriptionManager - по сути последовательно и если что-то стопит его - какая-то таска, то и все останавливается.
Приветствую!
Спросил про особенности реализации, потому как на версии 7.16 были сообщения о проблемах с HTTP-клиентом External Task ( цикл external task повисал при connection timeout).
Т.е. нужно обновить платформу до более свежей? 7.20 например? А можно обновлять только ExternalTaskClient без обновления camunda engine? Те. энджин останется на 7.16, а экстерналтаск на 7.20? Или нужно все сразу поднять?
В общем, проблема примерно следующая. В таске отправляется сообщение через JMSTemplate.convertAndSend(queuee, () → {
})
Вот сюда примерно доходит и повисает. Как будто бы с блокировками связано. Лямбда MessagePostProcessor - не исполняется. Но это по логам происходит не всегда, т.е. число успешных отправок тоже есть.
В 7.20 более свежая версия Apache HTTP Components используется (в какой точно версии поменялась, сказать не могу, вижу по исходному коду на GitHub, что примерно 1-2 года назад).
Можно оставить engine на 16-й версии, обновить только External Task Client.
И самое главное забыл
Что в настройках у клиента?
Установлены значения для async-response-timeout, disable-backoff-strategy, lock-duration ?
В 7.20 и более свежая версия спринга требуется судя по таблице. Но причину пробелем нашли.
async-response-timeout = 1000, disable-backoff-strategy=true, lock-duration не задан. По умолчанию.