Spring Batch - повторный запуск сервисного активатора - PullRequest
0 голосов
/ 07 апреля 2020

У нас есть приложение Spring Batch, которое работает в режиме Master-Slave. В конце мастера есть Reader, который запрашивает исходную базу данных и выполняет некоторую обработку записей, прежде чем он помещает записи в промежуточную таблицу.

Пока это происходит, мастер также запускает ведомые параллельно. Эти подчиненные считывают записи из промежуточной таблицы, которые подчиняются их разделу, и начинают обрабатывать их одновременно, есть 5 подчиненных, которые имеют отдельный раздел записей в промежуточной таблице для работы.

Ведущий и подчиненные работать в разных JVM.

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

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

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

Есть ли способ снова активировать Service Activation на подчиненных устройствах от ведущего устройства, когда такая ситуация возникает? Другими словами, можем ли мы заставить подчиненные устройства ждать, пока обработка мастера не будет полностью завершена и все записи доступны в промежуточной таблице, прежде чем они отправят ответные сообщения мастеру?

1 Ответ

1 голос
/ 07 апреля 2020

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

Пакетная обработка заключается в обработке фиксированных наборов данных. Если источник данных перемещается, он становится потоковой обработкой. Назначение фиксированного набора данных для задания - это то, что обеспечивает возможность перезапуска.

В соответствии с вашим дизайном разделы не являются фиксированными. Поэтому вам нужно убедиться, что каждый подчиненный сервер обрабатывает фиксированный набор записей или вместо этого использует потоковое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...