事务补偿机制
什么是事务补偿机制?
针对每个操作,都要注册一个与其对应的补偿(撤销)操作
在执行失败时,调用补偿操作,撤销之前的操作
A给B转账的例子,A和B在两家不同的银行
A账户减200元,B账户加200元
两个操作要保证原子性,要么全成功、要么全失败
由于A和B在两家不同的银行,所以存在分布式事务的问题
转账接口需要提供补偿机制
如果A在扣减的过程出现问题,直接抛出异常,事务回滚
B在增加余额的过程中,出现问题,要调用A的补偿接口
A之前的扣减操作,得到了补偿,进行了撤销
保证了A和B的账是没有问题的
重试补偿案例:
当时是简单的进行定时,每隔15分钟拉取所有的未推送记录(包含上次未推成功的),放入MQ中,在消费端进行数据推送。---在消费端有另一套数据一致性机制,这里可以默认只要放入MQ,即可认定数据推送成功。
1、线下记录表增加两个字段,推送是否成功字段status,推送次数字段reload_count,表中已有记录创建时间ins_time
2、设置筛选条件:当前时间 - 创建时间 >= 2的n次幂 * 初次间隔时长
SELECT oh.*
ta_combine_order_hdr oh
where oh.`status`=2
and UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(oh.ins_time) >= POW(2,oh.reload_count) *10
and oh.ask_type = 1
limit 200
————————————————
推荐阅读:
原文链接:https://blog.csdn.net/weixin_45647118/article/details/117929335
https://www.csdn.net/tags/MtzaAgwsNjI0MzItYmxvZwO0O0OO0O0O.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2902747/ ,如需转载,请注明出处,否则将追究法律责任。