Exactly-once. Пока не позвали соседний сервис
Сегодня в ленте Хабра попался YTsaurus Flow — потоковый движок Яндекса, код которого открыли 6 октября.
Внутри Flow состояние, прогресс обработки и данные для поддерживаемых синхронных приёмников фиксируются одной транзакцией. Либо всё, либо ничего.
Но в разборе есть оговорка: произвольные HTTP-вызовы из вашего кода этой гарантией не покрываются.
Например, обработчик успел отправить уведомление, а потом упал до фиксации результата. При повторной обработке уведомление может уйти ещё раз. Здесь уже нужна идемпотентность внешнего действия.
Для асинхронных внешних приёмников у Flow есть transactional outbox: сначала надёжно сохранить, потом отправлять с ретраями и идентификатором для дедупликации.
Вот тебе и «ровно один раз». Сначала надо уточнить, где именно.