В веб-приложении люди загружают файлы для обработки. Обработка файла может занять от 30 секунд до 30 минут на файл в зависимости от размера файла. В течение сеанса загрузки пользователи загружают от 1 до 20 файлов, и они могут быть загружены в нескольких пакетах, причем промежуток времени между пакетами составляет до 5 минут.
Я хочу уведомить загрузчик о завершении обработки , но также не хотят отправлять уведомление, когда первый пакет завершил обработку до того, как другой пакет был загружен в течение 2-5 минутного периода времени. Ie. загрузчик видит себя загружающим несколько пакетов файлов как один «рабочий период», который он может выполнять только каждые пару дней.
Вместо того, чтобы выполнять регулярную проверку, я реализовал уведомление с помощью AWS SQS : - по завершении каждого обрабатываемого файла сообщение отправляется в очередь с 5-минутной задержкой доставки. - когда это сообщение обрабатывается, оно проверяет, есть ли еще какой-либо обрабатываемый файл, и если нет, то отправляет уведомление по электронной почте
. Этот подход приводит к отправке нескольких электронных писем, если есть несколько файлов, которые завершают обработку за последние 5 минут обработки всех файлов.
Чтобы исправить это, я подумал об использовании очереди AQS SQS FIFO с тем же Deduplicationid, однако я понимаю, что мне нужно пройти через последнее сообщение с тот же Deduplicationid, а не первый.
Есть ли лучший способ решить эту проблему с системами, управляемыми событиями? В идеале я хочу ограничить количество необходимых очередей, так как эта система очень управляема прототипом, а также не предоставляет другого места для хранения состояния - у меня уже есть реляционная база данных.