Как вызвать внешний API ровно один раз?

#message-queue #worker #idempotent

#очередь сообщений #работник #идемпотентный

Вопрос:

Предположим, у нас есть работник, который отвечает за отправку платежей.

Наш работник, приняв решение о том, какие деньги будут отправлены, вызывает API внешнего платежного сервиса.

API внешнего платежного сервиса не предоставляет возможности сделать нашего работника идемпотентным.

Как гарантировать, что наш работник обрабатывает только один раз и только один раз?

Возможное решение состоит в том, чтобы согласиться с тем, что нет способа гарантировать точно один раз, поэтому мы переходим к подходу не чаще одного раза, а также выполняем задание cron для периодической проверки платежей, которые необходимо отправить (необходим возможный ручной обзор).

Как платежи в целом справляются с подобными вещами в мире, где внешние API не обеспечивают механизм идемпотентности?

Комментарии:

1. Мне кажется, что для достойного ответа на ваш вопрос потребуются конкретные сведения об остальной части вашего технологического стека.

Ответ №1:

Нет способа гарантировать один раз, если внешний API не предоставляет идемпотентный API. Если API предоставляет способ проверить, успешно ли выполнена операция, вы можете использовать его, чтобы решить, нужна ли повторная попытка.