У меня есть запланированный fw планировщик, в котором кварц выполняет триггер, который запускает весеннее пакетное задание, которое читает из базы данных и записывает в тему Kafka, чтение и запись выполняются кусками.
Назначение темы kafka имеетпотребитель, который выполняет бизнес-логику на полученных данных.В теме используется несколько разделов и несколько потребителей.
Интервал времени запуска может быть достаточно мал, прежде чем бизнес-логика закончит обработку всех записей из темы.
Таким образом, в основном кварц закончитсязапуск задания до полной обработки предыдущего задания.
Как убедиться, что задание не запускается и не запускается, когда наступает следующий запланированный срок, если предыдущее задание еще не завершено.Завершение работы не ограничивается групповой записью весны в тему кафки, но бизнес-логин на стороне слушателя обрабатывает все сообщение.
Постановка бизнес-задачи:
Допустим, есть 10000 заказов, которые былизаказ был возвращен и требует отмены с последующим электронным письмом к клиентам.
Идея состоит в том, что планировщик будет продолжать искать заказы с задержкой заказа каждые 30 минут и писать в тему, прослушиваемую бизнес-службой, для отмены заказов и отправкиэлектронные письма.
Теперь, если 10000 записей записаны в момент времени 0 в теме и в момент времени 30, если бизнес-служба еще обрабатывает 2000 заказов.Поскольку планировщик сработает в момент времени 30, он найдет 2000 заказов, которые все еще упорядочены, и запишет их в одну и ту же тему, что приведет к тому, что слушатель обработает эти заказы дважды.Со временем это приведет к накоплению больших данных и накладным расходам на бизнес-логику.
Требуемое решение:
Как убедиться, что не выполняется чтение в весеннем пакете, если слушатель все еще обрабатываетпредыдущий запрос на работу.Также поставить в очередь задание, запущенное так, чтобы его можно было запустить после завершения предыдущего задания.Постановка в очередь будет производиться только в случае срабатывания кварца и только один раз, потому что этого достаточно для считывания подходящих данных.
Любое предложение или рекомендация будут высоко оценены.