2017-07-25 9 views
0

Im derzeit entwickeln Zahlungssystem, die Zahlung durchführt und schreibt, dass Artikel in Cloud gehosteten Datenbank, Azure gekauft wird.Behandlung mehrerer Befehle als Transaktion

So funktioniert es derzeit ist:

  1. Transaktion mit 3rd-Party-Zahlungssystem
  2. Wenn Erfolg, neue Abonnementreihe in der Datenbank für den Benutzer hinzugefügt
  3. Transaktionsverlauf und andere relevante Sachen geschrieben in
  4. Datenbank

jedoch in einem unwahrscheinlichen Fall, dass:

  1. Transaktion ist der Erfolg (http Aufruf zum Erfolg Payment Gateway Returns)
  2. Aus irgendeinem Grunde, legen Sie in der Datenbank nicht

Ich werde mich mit dem Benutzer am Ende für die ohne das eigentliche Abonnement für einen Artikel bezahlt hat Artikel (da die Zeile wird nicht in unserer Datenbank sein)

Diese beiden Aufrufe sind nicht datenbankbezogen (eine ist, ist eine andere async http Anfrage), so kann ich sie nicht als Transaktion behandeln (da kann ich wirklich Rollback).

Also meine Frage ist für mehr erfahren, wie man mit dieser Situation umgehen?

Antwort

0

Um dies zu beantworten, habe ich dies mit Compensating Transaction-Muster implementiert.

Funktioniert wie erwartet

Verwandte Themen