Как правильно построить сервис, создающий отложенные задачи на основе расписания из другого сервиса?
Есть 2 сервиса (A и B). Сервис A хранит в себе расписание для генерации отчётов (Формат: еженедельно в пятницу в 18:22, секунды не учитываются), сервис B должен на основе этого расписания генерировать и сохранять к себе соответствующий отчёт. Ожидаемый кейс, что в промежутке одного часа (в 20:00-21:00 в субботу) может одновременно потребоваться генерация ~1000 отчётов (операция относительно тяжёлая и затратная по времени: ~20 секунд на отчёт, ожидаемое кол-во воркеров - 8). Задача усложняется тем, что в процессе дня время генерации может измениться (например, переехать с 18:00 на 20:00).
Пока вижу такое решение:
Сервис B по HTTP (они внутри одного контура, так что можно позволить себе) каждую минуту опрашивает сервис A и запрашивает у него все id-шники сущностей, отчёт для которых должен быть сгенерирован в ближайшие 5 минут, после чего ставит отложенные задачи в очередь, каждая задача маркируется уникальной по паре(id-сущности + временная метка), чтобы при следующих опросах в течение 5 минут не залетели дубликаты и были подхвачены задания, установленные в соответствующий промежуток. Кейсом, при котором время уже запланированного задания было изменено можно пренебречь (сказать, что не успели поменять, лол, либо в перспективе дописать соответствующее событие, которое будет реагировать на изменение в исходном сервисе и убивать уже существующее задание в очереди).
Но не могу сообразить, какие могут быть минусы, т.к. пока с такими задачи не сталкивался, может кто подсказать, в верном направлении иду?
Dmitry Bay, не понял, что значит планировщик в B-сервисе? Он и так в сервисе B, просто исходные данные расписания хранятся в A, т.к. их потребляет не только сервис B, но и C и D для своих нужд.