raincat icon indicating copy to clipboard operation
raincat copied to clipboard

强一致分布式事务框架

Results 32 raincat issues
Sort by recently updated
recently updated
newest added

Spring的 `@Transactional` 当在配置文件中有多个 TransactionManager , 可以用该属性`transactionManager` 指定选择哪个事务管理器。而目前 `@TxTransaction` 还不支持指定某个事务管理器。我这边提个pr,你看看

idWorkerUtils中,使用此方法生成的id有重复的风险。 ![image](https://user-images.githubusercontent.com/9690089/50463180-02b2f280-09c5-11e9-83d2-196268ecb2d7.png) 目前我在显示环境发现多次不同时间的事务,加到同一个事务组了。 ![image](https://user-images.githubusercontent.com/9690089/50463235-7ce37700-09c5-11e9-82f4-7dd968cd0a23.png)

RequestContextHolder是一个threadlocal变量,事务参与者是新开线程执行的,传递不过去,需要类似groupId一样,在ActorTxTransactionHandler中传递一下,以便事务参与者可以使用RequestContextHolder。 ![0s ss za40pm5 _adfu23p](https://user-images.githubusercontent.com/28921096/48401191-6cec3c80-e763-11e8-8751-3b33ebc49521.png)

作者在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请求避免此冲突。 ![qq 20181113165840](https://user-images.githubusercontent.com/28921096/48401979-678ff180-e765-11e8-8cfb-6f545e97dc92.jpg)

先赞叹一下,作者真大牛。 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 发生异常都可以