Восстановление очереди после остановки обработчика
Версия 2.7
Зафиксируйте границу сбоя
Установите время остановки, затронутые очереди и последний подтверждённый результат. Для входящих событий отметьте последнее успешно обработанное событие и диапазон, в котором обработка отставала. Для исходящих задач найдите операции с неизвестным итогом. До разбора проверьте, не работают ли другие экземпляры с той же очередью и теми же заданиями.
Приоритеты при запуске
Сначала восстановите чтение состояния и приём новых событий. Затем обработайте сохранённые задания небольшими группами. Проверьте, что время ожидания повтора соблюдается, а фоновые задачи не исчерпывают лимит общих ключей. Для важных незавершённых заказов выделите отдельную очередь разбирательства с ответственным. Длительность восстановления зависит от объёма и возраста задач.
Повтор входящих событий
Внутренний повтор должен сохранять event_id и проверять, выполнен ли бизнес-эффект. Если действие уже применено, отметьте результат в журнале и завершите задачу. Если состояние неизвестно, сравните локальный заказ с подтверждённой историей отправления. HTTP-подтверждение приёма отражает запись события в очередь, а завершение обработки проверяется отдельно.
Повтор исходящего создания
Для запроса создания с неизвестным итогом используйте прежний Idempotency-Key и неизменное тело в течение 24 часов хранения записи. При истечении этого окна сначала сверяйте отправление по журналу и кабинету. Изолируйте задания, которые требуют ручного решения. Это предотвращает выдачу новой этикетки для заказа, уже обработанного до остановки.
Как подтвердить восстановление
Измерьте возраст старейшего задания, число неизвестных исходов и число повторных бизнес-эффектов. На выборке сопоставьте событие, внутреннюю задачу и итоговый заказ. Укажите диапазон времени, который прошёл сверку, и оставшиеся исключения. Подтвердите, что новые задачи обрабатываются штатно, а исправленные старые задачи сохраняют прежние идентификаторы.
Разделите накопленные и новые задания
Сопоставьте время приёма с точкой перезапуска. Убедитесь, что старый резервный экземпляр не продолжает вытаскивать задания одновременно с восстановленным. Если нужно, запустите новый обработчик на небольшой выборке. Сохраните видимость остальной очереди и проверьте, что её элементы помечены как ожидающие, а не как уже подтверждённые.
Что зафиксировать для повторения учения
Сохраните сценарий остановки, контрольные идентификаторы событий и известный итог каждой операции до отключения. В следующем учении добавьте случай потери ответа после успешного сохранения, чтобы проверить границу между сетью и хранилищем. Сравните число полученных событий, задач и бизнес-изменений. Укажите, какие случаи пришлось проверять в кабинете и почему автоматический повтор был остановлен.