Amazon FPS 上でアプリを開発しています。FPS で支払いを行う場合、支払いは非同期的に成功します。リクエストを行い、請求が完了したかどうかを通知する POST (即時支払い通知) を待ちます。
次のページの読み込みまでに課金が完了したかどうかをユーザーに確認してもらう必要があるため (可能であれば)、サーバーを用意しています。
- ユーザーに請求してから、
- データベースのステータス更新をチェックするループをスピンし、
- 時間がかかりすぎる場合はタイムアウト
一方、別のサーバー プロセスは次のとおりです。
- IPNを受け取り、
- 他のプロセスが確認できるように、データベースでの成功に注意してください。
私は 3 つのワーカーで Unicorn を実行しています。それらはすべて同じターミナル ウィンドウにログインしています。最初のプロセスがスピンし始め、請求がまだ保留中であることを繰り返し報告しているのが見えます。次に、IPN が入ってくるのを確認し、2 番目のプロセスがそれを取得して、成功したことをデータベースに書き込みます。次に、最初のプロセスが保留中であることを確認し続けます。
データベースに書き込まれた成功値が表示されないのはなぜですか?
トランザクションの問題のように感じたので、ループして最新の請求のステータスを出力する別のプロセスを実行しました。2 番目のプロセスが請求を成功としてマークしたことを報告したとき、この 3 番目の独立したプロセスは同意しました。更新された値を認識できないのは、最初のサーバー プロセスにすぎません。
私が知る限り、その最初のプロセスのループはトランザクション内にないため、古いスナップショットを読み取るべきではありません。しかし、おそらくそうですか?どうすればわかりますか?
私のスタック:
- ユニコーン 4.6.3
- レール4.0
- ルビー2.0
- ポストグル 9.2