Различать событие и попытку
Заказ WEB-1042 сохраняет один идентификатор при повторных нажатиях. Счётчик попыток относится к обработке этой записи. Поэтому сбой не превращает одну задачу в несколько независимых заказов.
Сбой проходит.
Заказ остаётся.
Заказ уже пришёл с сайта, а учётная система временно недоступна. Что увидит сотрудник и что произойдёт при повторной отправке? В этом примере этот путь можно пройти самому, включая сбой и восстановление.

Покупатель нажал «Оформить». На сайте заказ есть, а в учётной системе его пока нет: соединение прервалось в самый неудобный момент. Сотрудник повторяет отправку. Затем исходное уведомление приходит ещё раз. Покупатель по-прежнему ждёт одну посылку. Система уже получила несколько сигналов. Для интернет-магазина это не редкая инженерная загадка, а задача, у которой должен быть понятный рабочий ответ.
В этом примере мы реализовали интерфейс очереди и модель обработки такого события. Заказ сохраняет номер, попытки считаются отдельно. При сбое сотрудник видит причину и доступное действие. После восстановления связи он возвращается к той же записи. Нужна не новая заявка, а завершение уже начатой операции.
Рядом находится журнал. В нём видно принятие заказа, сбой, повтор и подтверждение обработки. Повтор того же события не увеличивает число заказов. Это небольшой интерфейс, но в нём можно проверить важную договорённость между системами: повторять попытку и создавать новую сущность — разные операции.
Учебная очередь работает в браузере. Реальная учётная система не подключена; состояние сбрасывается при перезагрузке.
Для интерактивного примера нужен JavaScript. История и проектные решения доступны ниже.
0Заказов в этой демонстрации
0Подтверждено обработкой
Заказ WEB-1042 сохраняет один идентификатор при повторных нажатиях. Счётчик попыток относится к обработке этой записи. Поэтому сбой не превращает одну задачу в несколько независимых заказов.
В очереди различаются ожидание, необходимость повтора и подтверждённая обработка. Сотрудник видит, что произошло, а не угадывает по бесконечному индикатору загрузки.
Журнал объясняет результат каждой команды. Отдельно показаны число принятых заказов и число подтверждённых записей. Эти показатели относятся только к текущей учебной сессии.
Реализованы состояния очереди, журнал и распознавание повторного события. Публичный пример хранит данные до перезагрузки страницы; серверная очередь и обмен с учётной системой подключаются при внедрении.
В рабочем внедрении очередь должна храниться на сервере и переживать перезапуск. Нужны правила повторов, уникальные ключи, контроль зависших операций, права доступа и уведомления ответственного. Отдельно проверяется случай, когда учётная система уже записала заказ, но подтверждение потерялось. Пилот оценивают по потерянным событиям, дублям и времени восстановления.
Обсудить похожую задачуРасскажите, что хотите изменить или создать. Предложим формат работы и оценим первый этап. Готовое техническое задание не требуется.
Для новых клиентов — 5% на первый проект.