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