Задача обработчика
Обработчик очереди - это программа, которая превращает файлы от 1С в данные витрины. Он запускается по расписанию, каждые несколько секунд, и сам решает три вопроса: можно ли брать выгрузку в работу, актуальна ли она и что делать, если работа прервалась.
Правило первое: работает только один обработчик
Перед началом работы обработчик проверяет, не занят ли обмен предыдущим запуском. Если предыдущая обработка ещё идёт - новый запуск завершается сразу, ничего не делая.
Это исключает ситуацию, когда две программы одновременно правят одни и те же цены или остатки и мешают друг другу.
Правило второе: неполные выгрузки ждут
Если выгрузка состоит из нескольких частей и получены не все - она откладывается до следующей проверки. Каталог никогда не собирается из половины данных.
Правило третье: устаревшие снимки не обрабатываются
Полная выгрузка - это снимок всех данных на момент выгрузки. Если таких снимков накопилось несколько, обрабатывать их по очереди бессмысленно: каждый следующий заведомо содержит всё, что было в предыдущем.
Обработчик берёт в работу только самый свежий снимок, а предыдущие помечает устаревшими. Именно это правило позволяет обмену быстро восстанавливаться после простоя: данные сайта приходят в соответствие с 1С за один проход, без многочасовой обработки заведомо неактуальной очереди.
Важно, что так отбрасываются только полные снимки. Обычные обновления - "изменились три товара", "пришла новая цена" - обрабатываются все до единого, ни одно не теряется.
Правило четвёртое: одна ошибка не останавливает выгрузку
Внутри выгрузки могут встретиться ошибочные записи: например, цена для товара, которого нет в каталоге. Такая запись попадает в протокол, а обработка продолжается. Одна проблемная строка не должна лишать магазин остальных двухсот тысяч обновлений.
Если замечания были, выгрузка получает соответствующую отметку в журнале, а администратор видит в панели управления, что именно пошло не так.
Правило пятое: отметка о завершении ставится только по факту
Выгрузка считается обработанной лишь после того, как обработка дошла до конца. Если работа прервалась на середине - из-за сбоя или перезапуска сервера, - статус выгрузки не меняется, и она автоматически вернётся в работу через несколько секунд.
Повтор безопасен: записи привязаны к кодам из 1С, поэтому обработка просто доведёт дело до конца, не создав дубликатов.
Обзорная версия темы - статья про обмен целиком. Про сам проект - кейс B2B-платформы.
