litx轻量级分布式事务框架

联合创作 · 2023-10-01 07:08

litx 是一个基于补偿的轻量级分布式事务框架。(目前只支持 dubbo,未来计划支持 http 等其他 rpc 调用的补偿)

  • 对代码逻辑无侵入

  • 和 spring 事务无缝结合(内部实现是集成 spring 的事务管理器,靠 @transactional标注开启)

  • 自动回滚补偿接口

  • 如回滚异常提供 hook 接口可供扩展,当回滚失败时,可以拿到数据自行可作处理。

Quick Start

也可以参考 litx-test 的测试用例,其工程演示了在 dubbo 环境下的测试情况。

也可参照以下代码进行快速配置

第一步 定义你相关接口的 rollback 接口。假设你的 dubbo 方法为 submitOrder,回滚接口命名规则为rollbackSubmitOrder,请求参数定义为你submitOrder的返回类型。加上spring的事务标注@Transactional 并且再你的接口上加入 @Compensable标注

public interface DemoService {
	
	@Compensable
    	String test1();

	@Compensable
	String test2();
	
	void rollbackTest1(String str);
	
	void rollbackTest2(String str);
}

第二步 spring 配置中加入以下定义

<bean id="litxDubboDefinationScanner" class="com.thebeastshop.litx.spring.LitxDubboDefinationScanner"/>

第三步 替换默认的 spring 事务管理器

<bean name="transactionManager" class="com.thebeastshop.litx.transaction.LitTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

如果你想处理回滚异常的数据 请定义自己的类,实现 RollbackInvokeHook 接口。并把自己的类注册到 spring 容器内就可以。litx 启动的时候会自动扫描到。

测试用例说明

测试工程提供了一个 dubbo-provider,首先得启动他,用 Runner 的 main 启动(数据源配置请重新配置),然后启动 dubbo-consumer consumer 的 test 用例演示了一个用例:consumer 先调用 provider 的 test1,再调用 test2。test2 代码里主动抛错。test1 回滚,test1 回滚的时候主动抛错,然后被 consumer 自定义的 hook 捕获到。

浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报