今天,我想到一个简化的场景如下:
我有自己的支付系统,当用户来省钱时,我使用表单将交易数据保存在我自己的数据库中。在保存我自己的记录之前,我需要调用具有Web服务API的银行支付系统,例如
public boolean pay(userInfo userInfo, float money)
.
根据返回的结果,我确定是否保存自己的数据。
我的问题是,在调用银行支付API后,我自己的网络是否关闭,并且没有结果返回。如何确定我是否需要保存自己的表单记录。也许银行支付系统已经处理了这笔交易?如何使两部分数据同步?
我们无法更改银行付款 API,因为银行规范是固定的。Webservice API 是 SOAP 或 Restful
您的实现可能是这样的:
-
始终将事务数据保存到数据库中,并将其标记为"未处理"。
-
使用单独的"worker"进程,从数据库中获取所有未处理的交易,并调用
pay
银行支付系统的方法。 -
根据
pay
方法结果,选择更改/不更改事务的状态。
工作线程可以通过计划的进程(每XX秒/分钟/等)或一些不断查询未处理事务的服务(可能在循环之间有一些延迟)。
因此,如果银行支付系统"无结果",则不会更改交易状态,并且将在下次工作线程运行时重试"支付"方法。