这里写目录标题
背景
用户在平台购买了相应的并发资源业务量,在平台服务生成订单、账户扣款,同时下发最新的并发资源业务量到对应微服务。平台服务购买成功,下发对应微服务失败。
解决方案
一、通过手动抛异常的形式,回滚本地事务。
如果下发微服务接口异常或者返回结果告知失败,则手动抛出异常,本地方法加@transcational回滚本地事务,保持分布式事务一致性。
该方案如果下发失败,不会生成对应的订单、修改账户。
二、用本地消息表记录下发失败的消息,并且定时重新发送,记录重新发送失败的次数,成功则删除该消息。相当于柔性事务,保证分布式事务最终一致性。
该方案如果下发失败,会生成对应订单、修改账户。
着重说下方案二
本地消息补偿方案
1.建一个本地消息失败表。
CREATE TABLE `bill_concurrency_fail_record` (
`id` bigint(20) NOT NULL COMMENT '主键',
`tenant_id` varchar(32) NOT NULL DEFAULT '' COMMENT '租户ID',
`resource_type` int(11) NOT NULL DEFAULT '0' COMMENT '资源类型',
`fail_num` int(11) NOT NULL COMMENT '失败次数',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT '