Про обмен обычно спрашивают, как быстро он работает. Правильный вопрос другой: что он делает, когда что-то пошло не так. Работающий обмен виден в первый день, а его поведение при сбое выясняется через полгода, когда потерялся заказ.
Собрал коды ответов, которые встречаются в обмене с маркетплейсами, и то, как на каждый из них разумно реагировать. Числа наши, из своей реализации, не из общих рекомендаций.
Коды, на которые реагируют по-разному
| Код | Что означает | Что должно происходить |
|---|---|---|
| 402 | закончилась подписка или лимит | остановить опрос и сказать об этом человеку |
| 429 | слишком много запросов | повтор с растущей паузой, остальные интеграции продолжают работать |
| 5xx | сбой на стороне площадки | повтор с растущей паузой, запись в журнал |
Ключевое различие между 429 и 5xx с одной стороны и 402 с другой: первые два лечатся ожиданием, третий ожиданием не лечится никогда. Обмен, который на 402 продолжает долбить площадку, просто расходует лимиты впустую.
Отдельно про 429: важно не то, что обмен ждет, а то, ждет ли он только по этой площадке. Если очередь одна на все интеграции, превышение лимита по Ozon останавливает выгрузку в Wildberries. У нас очереди разведены, и это тот вопрос, который стоит задать любому решению для обмена.
Три попытки, потом очередь ошибок
Повторять бесконечно нельзя: событие, которое не обрабатывается в принципе, будет крутиться вечно и мешать остальным.
У нас так: три попытки, дальше событие уходит в отдельную очередь ошибок и там ждет человека. Не удаляется, не теряется, не повторяется по кругу.
Это важнее, чем кажется. Событие, которое исчезло молча, вы не найдете никогда: в 1С его нет, на площадке заказ есть, а между ними пусто. Событие, которое лежит в очереди ошибок, находится за минуту.
Двойное подтверждение
Одного подтверждения обработки мало, и вот почему.
Если подтверждать в начале, то сбой в середине обработки означает потерю: отправитель считает, что все хорошо, а документ не создан. Если подтверждать только в конце, то любой обрыв связи означает повтор целиком, а вместе с ним дубль документа.
Поэтому подтверждений два: первое означает «событие принято, повторять не надо», второе значит «обработано до конца, документ создан». Между ними событие числится принятым, но незавершенным, и его видно.
Практический вывод для выбора решения: спросите, что произойдет, если 1С упадет ровно в середине обработки заказа. Ответ «ничего не потеряется» должен подкрепляться механикой, а не обещанием.
Дубли
Одно и то же событие площадка может прислать несколько раз: повтор при таймауте, ручная перепроверка, восстановление после сбоя.
Признак дубля должен быть не «похожий заказ», а точный идентификатор события или платежа. Повторное событие с тем же идентификатором должно возвращать ответ «это дубль» и не создавать второй документ. Если проверка идет по сумме и дате, рано или поздно два настоящих одинаковых заказа склеятся в один.
Что спросить у своего обмена сегодня
Четыре вопроса, ответы на которые стоит знать до первого сбоя, а не после:
- Что происходит при 429: ждет или продолжает долбить, и останавливает ли это соседние интеграции.
- Сколько раз повторяется неудачное событие и куда попадает потом.
- Есть ли список событий, которые не удалось обработать, и кто его смотрит.
- По какому признаку определяется дубль.
Если на любой из них нет ответа, это не значит, что обмен плохой. Это значит, что вы узнаете ответ в день, когда что-то сломается, и узнавать будете в спешке.
Как устроена обработка событий и очередь ошибок у нас: Произвольная интеграция.
