一个注册场景,操作1,用户注册时在子平台生成帐号,操作2,调用rpc服务,在总平台上生成帐号(1和2是两个不同的数据库)。问题是如果调用rpc失败了(请求超时,或rpc返回错误等情况),但此时操作1已经执行,这时该如何处理
3 回答
fanfanfan5631
TA贡献1条经验 获得超0个赞
某业务方法:
本地dao操作;
方法1; // rpc调用
try {
方法2; // rpc操作
} catch (业务错误){
方法1的冲正方法;
}
try {
本地dao操作;
方法3; // rpc操作
} catch (业务错误){
方法1的冲正方法;
方法2的冲正方法;
}
封装返回报文(errorCode跟errorMsg)
此处的思路主要是:
调用完rpc服务之后,如果后续操作报错,则调用rpc服务的"回滚"服务,即冲正方法。例如转账服务 和 转账冲正服务。
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
一般主要靠两点保证数据一致性:
1.事务控制,如这里操作1执行完以后不提交事务,执行操作2等操作2返回正常请求了,然后提交操作1的事务
2.补偿机制,如这里的业务,可以通过保存请求信息和状态,然后后续通过定时任务等操作来扫描是否有总库和本地库会员不一致的情况,有的话,进行业务处理
- 3 回答
- 0 关注
- 827 浏览
添加回答
举报
0/150
提交
取消