raincat
raincat copied to clipboard
强一致分布式事务框架
Spring的 `@Transactional` 当在配置文件中有多个 TransactionManager , 可以用该属性`transactionManager` 指定选择哪个事务管理器。而目前 `@TxTransaction` 还不支持指定某个事务管理器。我这边提个pr,你看看
idWorkerUtils中,使用此方法生成的id有重复的风险。  目前我在显示环境发现多次不同时间的事务,加到同一个事务组了。 
RequestContextHolder是一个threadlocal变量,事务参与者是新开线程执行的,传递不过去,需要类似groupId一样,在ActorTxTransactionHandler中传递一下,以便事务参与者可以使用RequestContextHolder。 
作者在springCloud客户端中的RestTemplateConfiguration自定义Feign.Builder拦截Feign请求传递GroupId,这与开启hystrix冲突,feign开启hystrix后,定义了SleuthHystrixFeignBuilder,Feign.Builder全局只能有一个。 解决方法:改用bean的方式添加自定义的RequestInterceptor 然后发现事务参与者获取RequestContextHolder.getRequestAttributes()为null 原因:RequestContextHolder是一个threadlocal变量,事务参与者是新开线程执行的,传递不过去,需要在ActorTxTransactionHandler中传递一下RequestContextHolder
springCloud中的RestTemplateConfiguration自定义Feign.Builder拦截feign调用,在header头中传递GroupId,但开启hystrix后,与hystix定义的SleuthHystrixFeignBuilder冲突,可以通过自定义RequestInterceptor拦截feign请求避免此冲突。 
先赞叹一下,作者真大牛。 A调用了S1,S2,S3服务,运行正常进入提交事务的过程。S1提交正常,S2提交正常。**但是提交S3的时候,可S3的网络出现问题,或者是S3对应的DB3数据库宕机**。 这个时候会陷入这样的境地,那就是S1,和S2的事务已经提交,没法回滚,也没有办法让S3提交。这个问题要怎么处理? 还有,本地服务的补偿,是一个什么样的机制呢?因为并没有看到关于补偿的介绍
需要加上配置我呢见 register-with-eureka: false fetch-registry: false 否则会报错误 com-netflix-discovery-shared-transport-transportexception-cannot-execute-reques
ActorTxTransactionHandler代码第160行"platformTransactionManager.commit(transactionStatus);"参与者提交事务时如果抛异常,当前事务回滚,在finally中删除了本地补偿信息,这样就导致了当前服务的数据丢失,其他服务数据正常入库,且当前服务无法进行补偿
做了全局异常处理 A->B B服务发生异常A就不会回滚 A 发生异常都可以