![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式事务
快乐的码农一枚
这个作者很懒,什么都没留下…
展开
-
Spring事务失效原因
数据库引擎不支持事务 mysql需要是innodb 方法所属的类对象不是spring的bean 方法需要是public 调用的时候,不是通过bean的调用,而是走了类的内部调用或者自己new的对象调用 数据源没有配置事务管理器 Propagation.NOT_SUPPORTED 没有回滚,可能因为没有符合条件的异常抛出...原创 2020-01-09 13:11:02 · 68 阅读 · 0 评论 -
InnoDB 事务可见性
InnoDB在每行记录的后面会隐性的增加两列:创建版本号和删除版本号数据库每开启一个事务,就会生成一个系统版本号 用来和数据库行记录的版本号进行对比insert 在行记录创建版本号标识上创建时候的系统版本delete 在行记录删除版本号标识上当前系统版本update delete和insert的合集以上貌似是错误的;如果事务A申请版本号是30, 事务B申请版本号是31 因为有可能后申请事务B先提交了,但是还是不能被事务A所看到;实际上行记录后面增加了三个隐藏字...原创 2020-06-24 11:40:47 · 932 阅读 · 0 评论 -
事务一致性
1、发送mq消息可能会失败,发送消息失败后先将入库;2、job扫描发送失败的消息记录,再次发送消息3、消费消息的地方进行幂等性过滤原创 2022-04-19 21:56:18 · 78 阅读 · 0 评论 -
seata的一些细节
1、@LocalTCC 里面的bean需要是本地的bean 如果不配置,直接用@TwoPhaseBusinessAction 可以是远程的bean2、transaction log store, only used in seata-server seata服务端保存日志 支持db redis file3、 配置文件中 registry 作用 配置文件中 config 作用...原创 2022-05-09 16:26:19 · 179 阅读 · 0 评论 -
事务最终一致性
一、业务场景从移动系统同步订单状态,根据同步过来的状态来执行自己系统的业务逻辑由于移动那边的订单状态不会以为我们这边业务逻辑而回滚他们的状态所以只能采用 最终一致性,即我们这边的业务逻辑不停的进行重试,来达到最终一致性二、实现细节同步移动的订单状态,进行入库操作,然后发送mq消息通知进行业务逻辑变更入库操作 增加字段来标识 是否标识 当前的状态变更是否完成了业务逻辑变更字段;如果已经进行了业务变更,将标识改成已进行业务逻辑处理;起动job进行扫描超过多长时间还未进行业务逻辑处理的原创 2022-04-19 08:58:09 · 163 阅读 · 0 评论 -
分布式事务 可靠消息最终一致性方案
A 系统先发送一个 prepared 消息到 mq,如果这个 prepared 消息发送失败那么就直接取消操作别执行了; 如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉 mq 发送确认消息,如果失败就告诉 mq 回滚消息; 如果发送了确认消息,那么此时 B 系统会接收到确认消息,然后执行本地的事务; mq 会自动定时轮询所有 prepared 消息...原创 2020-04-29 13:59:24 · 251 阅读 · 0 评论 -
分布式事务 本地消息表
主要依赖本地的消息表来保证数据的一致性 例如 系统A和系统B需要同步修改数据 系统A增加本地消息表、系统B也增加本地消息表 在A系统的本地事务中,需要处理A系统处理逻辑 与 A系统消息表插入一条消息数据 接着 A 系统将这个消息发送到 MQ 中去; B系统则消费这个MQ消息,在本地事务中处理B系统的逻辑,以及插入B系统的消息表一条数据 B系统处理成功之后,则更新B系统的...原创 2020-04-29 11:49:55 · 295 阅读 · 0 评论 -
最大努力通知型
钱包的业务方案 开放支付的接口,再加上主动查询的是否支付成功的接口当订单模块发起支付请求后。钱包模块进行异步处理,先回复申请成功的状态返回订单模块;订单模块需要配置一个回调接口 钱包模块异步处理完支付后,则调用回调接口,告知订单模块是否支持成功;这个回调是同步的,如果超时或者失败,则进行再次通知,直到通知成功或者重试次数超出阀值 钱包模块增加一个接口,让订单主动来查询是否支付成功的接...原创 2020-04-22 18:43:48 · 148 阅读 · 0 评论 -
TCC分布式事务
场景分析:用户下单,减库存并消耗优惠券涉及微服务的三个子模块:订单模块、库存模块、促销模块订单模块作为事务控制器 订单本地方法进行拦截器处理 @Compensable(confirmMethod = "transferConfirm", cancelMethod = "transferCancel")@Transactional 利用spring的拦截器,拦截注解为Tra...原创 2020-04-22 18:21:05 · 151 阅读 · 0 评论 -
基于可靠消息的最终一致性方案
场景:二手项目的订单支付完成,需要发送消息给卖家(需要发货)发送消息给卖家,提示卖家发货 消息发送到rabbitmq 订单修改状态,修改为消息已发送的状态 rabbitmq回调确认收到消息的ack给业务模块,这时修改订单状态为消息发送已完成状态 rabbitmq消费者 消费完,再恢复消费完成的ack 消费者消费的时候需要确认订单是否已经是完成状态防止第二步失败上述场...原创 2020-04-21 16:52:15 · 379 阅读 · 0 评论 -
订单支付微服务重构----涉及分布式事务
这是一张典型的分布式事务,但需要额外的服务JobController方案的风险点 redis可能丢失失败的数据 控制最大重试次数 消费消息的消费者要保证幂等性...原创 2020-01-15 16:18:10 · 280 阅读 · 0 评论 -
分布式事务
TCC基于RM本地事务来实现 https://github.com/liuyangming/ByteTCC源码分析:1.1.1. Spring Cloud<dependency> <groupId>org.bytesoft</groupId> <artifactId>bytetcc-supports-springcloud<...原创 2020-01-14 17:22:37 · 232 阅读 · 0 评论