1 业务场景
我们有个需求是外部客户需要在我们系统创建一个账号。业务流程如下
但是我们运行一段时间后发现一个问题,有客户反创建客户账号时,提示账号已经存在,但是我们系统却查不到单号
2 问题分析
经分析报错来源于权限系统,我们仔细分析下流程就会发现,很有可能是传给权限成功但入库失败导致的。因为我们入库失败外部接口不知道这时候导致权限接口创建成功但是我们系统没有。
3 解决办法
经分析我们发现数据入库跟调用权限系统必须有事务性,要么全部成功要么全失败,想到这里就好办了,如下时序图,我们吧代用外部系统放在数据入库后面就行了,如果调用外部系统失败我们就报错这时候利用数据库事务回滚将存入库的数据回滚掉。如果调用外部系统成功那说明数据库已经入库成功
4 总结
- 调用外部系统要注意事务一致性