Есть ли способ обеспечить поведение FIFO (первым пришел, первым вышел) с очередями задач в GAE?
Документация GAE гласит, что FIFO является одним из факторов, влияющих на порядок выполнения задач, но в той же документации говорится, что «планирование системы может« перепрыгивать »новые задачи в начало очереди», и я подтвердил это поведение тестовое задание. Эффект: мои события обрабатываются не по порядку.
Документы говорят:
https://developers.google.com/appengine/docs/java/taskqueue/overview-push
Порядок выполнения задач зависит от нескольких факторов:
Положение задачи в очереди. App Engine пытается обрабатывать задачи в порядке FIFO> (первым пришел, первым вышел). Как правило, задачи вставляются в конец очереди, и
казнен из головы очереди.
Отставание задач в очереди. Система пытается обеспечить минимальную задержку
возможно для любой заданной задачи с помощью специально оптимизированных уведомлений планировщику.
Таким образом, в случае, когда очередь имеет большое отставание задач,
Системное планирование может «перепрыгивать» новые задачи в начало очереди .
Значение свойства etaMillis задачи. Это свойство определяет
самое раннее время, когда задача может быть выполнена. App Engine всегда ждет, пока
после указанного ETA обрабатывать push-задачи.
Значение свойства countdownMillis задачи. Это свойство определяет минимум
количество секунд ожидания перед выполнением задачи. Обратный отсчет и эта
являются взаимоисключающими; если вы укажете один, не указывайте другой.
Что мне нужно сделать? В моем случае я буду обрабатывать 1-2 миллиона событий в день, приходящих с транспортных средств. Эти события могут быть отправлены с любым интервалом (1 секунда, 1 минута или 1 час). Порядок обработки события должен быть гарантирован. Мне нужен процесс по метке времени, который генерируется на встроенном устройстве внутри автомобиля.
Что у меня сейчас?
Сервлет Rest, вызываемый потребителем и создающий задачу (данные события находятся в полезной нагрузке).
После этого рабочий сервлет получает эту задачу и:
Десериализация данных события;
Поместить событие в хранилище данных;
Обновление автомобиля в хранилище данных.
Итак, опять же, есть ли способ обеспечить только поведение FIFO? Или как я могу улучшить это решение, чтобы получить это?