Конфигурация заданий Spring Batch Partition на WildFly 18.x / JBoss EAP 7.x

Мы выполняем серию секционированных заданий Spring Batch в кластере wildfly (версия 18) или JBoss EAP 7.x. Мы хотим организовать циклический перебор разделов вокруг кластера. Таким образом, исходящий шлюз использует определенную ActiveMQ фабрику объединенных соединений activemq-ra со стратегией циклической загрузки. Эта часть, похоже, работает так, как ожидалось.

Кроме того, у каждого узла есть входящий шлюз для приема сообщений раздела. Шлюз входящей почты настроен с помощью InVMConnectionfactory. Цель состоит в том, чтобы каждый узел обрабатывал только сообщения, помещенные в его очередь.

Этот подход работал для JBoss EAP 5.x.

Мы наблюдаем, что потоки прослушивателя x для входящего шлюза начинают нормально работать. Но по мере прохождения последовательности пакетной обработки с большим количеством секционированных заданий количество потоков, обрабатывающих входящие сообщения, уменьшается, что приводит к тому, что сообщения остаются в очереди, и секционированные шаги выполняются последовательно, а не параллельно.

Такое поведение может наблюдаться даже на сервере с одним узлом, но гораздо хуже в кластере. Таким образом, похоже, проблема в прослушивателе входящего шлюза и соединениях activeMQ для проверки сообщений.

Может ли кто-нибудь порекомендовать, как в дальнейшем выявить и решить эту проблему?

Спасибо


person Mike Rother    schedule 14.05.2020    source источник
comment
Как настроены ваши потребители? Вы используете МБР? Пожалуйста, дополните.   -  person Justin Bertram    schedule 14.05.2020
comment
Это использует разделение Spring Batch, которое использует класс JmsInboundGateway из интеграции Spring. Я считаю, что в конечном итоге это сводится к Spring DefaultMessageListenerContainer   -  person Mike Rother    schedule 14.05.2020
comment
Мой ответ был связан с вашим комментарием? Если да, отметьте его как правильное, чтобы помочь другим пользователям, у которых в будущем возникнет этот же вопрос. Если нет, пожалуйста, поясните, чего не хватает. Спасибо!   -  person Justin Bertram    schedule 24.06.2020


Ответы (1)


Похоже, что некоторые потребители голодают, потому что другие потребители хранят неиспользованные сообщения в своем буфере. Попробуйте установить consumerWindowSize=0 в URL-адресе, который используют потребители. Подробнее об этом параметре можно прочитать в документации по ActiveMQ Artemis.

person Justin Bertram    schedule 14.05.2020