A系统调用B系统,A系统得到的结果,除了 成功,失败 外,还可能是连接超时。
连接超时的情况分多种:
1.A没连接上B,没调用B的接口;
2.A连接上B,B执行失败,超时了;
3.A连接上B,B执行成功,超时了;
一般,A发现调用超时后,必定要继续调用,直到B返回 成功 或者 失败 为止。
那么,如果这是A向B提交 insert新订单 或者 update库存数量;并且情况是(B执行成功,超时了)。此时如果没有做什么措施,就会造成重复Insert,update的情况。
- insert的情况:
这个解决方案比较简单,比如A系统与B系统商议一个提交编号,有A系统生成(可以是guid,保证唯一即可),B会把这个编号连同订单数据一起insert到数据库,每次Insert前,B都看看订单表里面有没这个编号,有则返回给A系统(提交成功)。
2.update的情况:
B系统新建一个表,叫(库存修改记录表),每次A系统调用 update B系统库存时,都提供一个guid给B系统,B系统update成功后,往“库存修改表”insert这个guid 。每次update前,都查一下这个guid有没在“库存修改表”,有则不update,直接返回给A系统(操作成功)。(insert情况也可以采用这种方式)
为了避免“库存修改记录表”过大,影响性能,定时将太旧的数据清除掉,会比较合理。
对了,有个专业术语叫“幂等性”,讲的就是这个事。











网友评论