Я реализовал систему для загрузки заказов продавца Amazon. Система работает так:
- мы начинаем загружать заказы с 12:00 до 14:00, поэтому я говорю Amazon (через их Java-клиент): «Дайте мне все заказы с 12:02 до 14:00 (две минуты разницы во времени для размещения ожидающих заказы, как описано Amazon в их API).
- Мы полностью загружаем эти заказы: если их больше сотни, мы используем следующий токен, и когда они у нас есть, мы используем операцию listOrderItems для каждого заказа, чтобы получить позиции.
Некоторые из этих заказов ожидают обработки, и если это так, мы сохраняем их в нашей базе данных и проверяем в следующий раз, готовы ли они к загрузке. Наше следующее задание будет выполняться в течение следующих двух часов, запрашивая все заказы с 2:00 до 3:58.
Эта операция работала нормально, но наши клиенты начали сообщать о пропущенных заказах со своей стороны. По-видимому, время от времени заказ проскальзывает сквозь пресловутые щели, и мы не знаем, почему. Чтобы исправить это, мы установили 30-минутное перекрытие, чтобы каждый раз, когда мы загружали заказы, мы смотрели на 30 минут назад. В дополнение к штрафу за загрузку избыточных заказов мы должны проверить базу данных, чтобы увидеть, был ли заказ уже обработан, поэтому это немного замедляет работу.
И сыпать соль на рану, это до сих пор не решило проблему! Это случается не так часто, но в среднем в день пропадает от 0 до 4 заказов.