0

我正在亚马逊 FPS 之上开发一个应用程序。当您使用 FPS 付款时,付款会异步成功:您发出请求并等待 POST(即时付款通知)通知您是否已完成收费。

我需要用户查看是否在下一页加载完成收费(如果可能),所以我有服务器:

  1. 向用户收费,然后
  2. 循环检查数据库的状态更新,以及
  3. 如果时间过长就超时

同时,另一个服务器进程是:

  1. 接收 IPN 和
  2. 注意数据库中的成功,以便其他进程看到。

我正在与 3 名工人一起经营 Unicorn。他们都登录到同一个终端窗口。我看到第一个进程开始旋转,反复报告收费仍在等待中。然后我看到IPN进来了,第二个进程把它捡起来并写入数据库,它已经成功了。然后我看到第一个进程继续看到它正在等待。

为什么它永远看不到写入数据库的成功值?

在我看来,这就像一个交易问题,所以我运行了一个单独的进程,循环并输出最新收费的状态。当第二个进程报告它标记充电成功时,第三个独立进程同意了。这只是第一个看不到更新值的服务器进程。

据我所知,第一个进程中的循环不在事务内,因此它不应该读取旧快照。但也许是?我该怎么说?

我的堆栈

  • 独角兽 4.6.3
  • 导轨 4.0
  • 红宝石 2.0
  • Postgres 9.2
4

0 回答 0