litx輕量級(jí)分布式事務(wù)框架
litx 是一個(gè)基于補(bǔ)償?shù)妮p量級(jí)分布式事務(wù)框架。(目前只支持 dubbo,未來(lái)計(jì)劃支持 http 等其他 rpc 調(diào)用的補(bǔ)償)
對(duì)代碼邏輯無(wú)侵入
和 spring 事務(wù)無(wú)縫結(jié)合(內(nèi)部實(shí)現(xiàn)是集成 spring 的事務(wù)管理器,靠 @transactional標(biāo)注開啟)
自動(dòng)回滾補(bǔ)償接口
如回滾異常提供 hook 接口可供擴(kuò)展,當(dāng)回滾失敗時(shí),可以拿到數(shù)據(jù)自行可作處理。
Quick Start
也可以參考 litx-test 的測(cè)試用例,其工程演示了在 dubbo 環(huán)境下的測(cè)試情況。
也可參照以下代碼進(jìn)行快速配置
第一步 定義你相關(guān)接口的 rollback 接口。假設(shè)你的 dubbo 方法為 submitOrder,回滾接口命名規(guī)則為rollbackSubmitOrder,請(qǐng)求參數(shù)定義為你submitOrder的返回類型。加上spring的事務(wù)標(biāo)注@Transactional 并且再你的接口上加入 @Compensable標(biāo)注
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"/>
第三步 替換默認(rèn)的 spring 事務(wù)管理器
<bean name="transactionManager" class="com.thebeastshop.litx.transaction.LitTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
如果你想處理回滾異常的數(shù)據(jù) 請(qǐng)定義自己的類,實(shí)現(xiàn) RollbackInvokeHook 接口。并把自己的類注冊(cè)到 spring 容器內(nèi)就可以。litx 啟動(dòng)的時(shí)候會(huì)自動(dòng)掃描到。
測(cè)試用例說(shuō)明
測(cè)試工程提供了一個(gè) dubbo-provider,首先得啟動(dòng)他,用 Runner 的 main 啟動(dòng)(數(shù)據(jù)源配置請(qǐng)重新配置),然后啟動(dòng) dubbo-consumer consumer 的 test 用例演示了一個(gè)用例:consumer 先調(diào)用 provider 的 test1,再調(diào)用 test2。test2 代碼里主動(dòng)拋錯(cuò)。test1 回滾,test1 回滾的時(shí)候主動(dòng)拋錯(cuò),然后被 consumer 自定義的 hook 捕獲到。
