170 похожих чатов

Коллеги, привет! Хотел бы поинтересоваться, как лучше реализовать систему роллбека

транзакций (не транзакции базы).

Случай: пользователь создал бронирование (pre-confirmation), авторизировались средства через Stripe. Далее, нам нужно завершить бронирование, мы должны подтвердить бронирование через вендор и затем сделать capture авторизированых средств. Но вот, например, бронирование не прошло, у Stripe по дефолту удержание авторизированных средств занимает до ~7 дней. Со стороны UX это очень печально, поэтому мы должны превентивно подавать запрос на отмену транзакции. Есть 2 варианта это сделать:
1. Использовать rollback механизм для того, чтобы в случае ошибки сервиса отменить транзакцию и вернуть пользователю моментально средства
2. Использовать ttl expiration eviction механизм, у нас все айди платежей хранятся в TTL кеше in-memory. Мы можем настроить callback функцию, чтоб при истечении срока записи ключа - автоматически отменялась транзакция по paymentID записи

У 1 подхода есть недостаток: много дублирующего кода, даже если сделать wrapper, то прийдется на каждый условный if err != nil вызывать врапер
У 2 подхода есть также недостатки: платеж будет отменен только через установленный на ключе ttl expiration = 30m (когда будет key eviction), если вдруг крашнеться сервер то все ключи будут удалены без отмены платежей

Что посоветуете в этом случае? Возможно есть иные варианты?

5 ответов

12 просмотров

использовать воркфлоу движок

Danylo-TERMINATOR Автор вопроса
Alisher
использовать воркфлоу движок

Можно пожалуйста поподробней? Впервые слышу о таком

Danylo-TERMINATOR Автор вопроса
Alisher
можете прочитать в инете

Очень размытое объяснение, конкретных линков на статьи в моем кейсе нету?

Danylo TERMINATOR
Очень размытое объяснение, конкретных линков на ст...

конкретных юзкейсов не было, нету и не будет, есть тулза которую настраиваешь под свой кейс

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта