java transaction cn_GitHub - cnzebra/tcc-transaction: tcc-transaction是TCC型事务java实现
1.2.x 版本不向下兼容1.1.x,主要在聲明tcc服務(wù)方法的注解有改變。1.2.x不同于1.1.x主要的地方在于發(fā)布服務(wù)時(shí)不再?gòu)?qiáng)制要求服務(wù)方法參數(shù)必須有TransactionContext參數(shù),從而減少對(duì)業(yè)務(wù)代碼的侵入。
Try: 嘗試執(zhí)行業(yè)務(wù)
完成所有業(yè)務(wù)檢查(一致性)
預(yù)留必須業(yè)務(wù)資源(準(zhǔn)隔離性)
Confirm: 確認(rèn)執(zhí)行業(yè)務(wù)
真正執(zhí)行業(yè)務(wù)
不作任何業(yè)務(wù)檢查
只使用Try階段預(yù)留的業(yè)務(wù)資源
Confirm操作滿足冪等性
Cancel: 取消執(zhí)行業(yè)務(wù)
釋放Try階段預(yù)留的業(yè)務(wù)資源
Cancel操作滿足冪等性
示例說(shuō)明:
tcc-transaction不和底層使用的rpc框架耦合,也就是使用doubbo,thrift,web service,http等都可。tcc-transaction-http-sample示例演示了不依賴底層rpc框架情況下如何使用tcc-transaction。
在底層rpc框架為dubbo情況下,可利用tcc-trnansaction-dubbo jar提供的便利,方便應(yīng)用使用tcc-transaction。tcc-transaction-dubbo-sample示例演示了在使用dubbo作為rpc調(diào)用情況下如何使用tcc-transaction。
示例演示在下完訂單后,使用紅包帳戶和資金帳戶來(lái)付款,紅包帳戶服務(wù)和資金帳戶服務(wù)在不同的系統(tǒng)中。示例中,有兩個(gè)SOA提供方,一個(gè)是CapitalTradeOrderService,代表著資金帳戶服務(wù),另一個(gè)是RedPacketTradeOrderService,代表著紅包帳戶服務(wù)。
下完訂單后,訂單狀態(tài)為DRAFT,在TCC事務(wù)中TRY階段,訂單支付服務(wù)將訂單狀態(tài)變成PAYING,同時(shí)遠(yuǎn)程調(diào)用紅包帳戶服務(wù)和資金帳戶服務(wù),將付款方的余額減掉(預(yù)留業(yè)務(wù)資源);如果在TRY階段,任何一個(gè)服務(wù)失敗,tcc-transaction將自動(dòng)調(diào)用這些服務(wù)對(duì)應(yīng)的cancel方法,訂單支付服務(wù)將訂單狀態(tài)變成PAY_FAILED,同時(shí)遠(yuǎn)程調(diào)用紅包帳戶服務(wù)和資金帳戶服務(wù),將付款方余額減掉的部分增加回去;如果TRY階段正常完成,則進(jìn)入CONFIRM階段,在CONFIRM階段(tcc-transaction自動(dòng)調(diào)用),訂單支付服務(wù)將訂單狀態(tài)變成CONFIRMED,同時(shí)遠(yuǎn)程調(diào)用紅包帳戶服務(wù)和資金帳戶服務(wù)對(duì)應(yīng)的CONFIRM方法,將收款方的余額增加。特別說(shuō)明下,由于是示例,在CONFIRM和CANCEL方法中沒(méi)有實(shí)現(xiàn)冪等性,如果在真實(shí)項(xiàng)目中使用,需要保證CONFIRM和CANCEL方法的冪等性。
在運(yùn)行sample前,需搭建好db環(huán)境,運(yùn)行dbscripts目錄下的create_db.sql建立數(shù)據(jù)庫(kù)實(shí)例及表;還需修改各種項(xiàng)目中jdbc.properties文件中的jdbc連接信息。
如有問(wèn)題可以在本項(xiàng)目的github issues中提問(wèn)。或是加微信:changmingxie,為便于識(shí)別,麻煩在備注中寫下 在tcc-transaction中聲明一個(gè)tcc的方法時(shí)需要加的注解類的名字,作者盡量回答疑問(wèn)。
總結(jié)
以上是生活随笔為你收集整理的java transaction cn_GitHub - cnzebra/tcc-transaction: tcc-transaction是TCC型事务java实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 静态变量的多线程同步问题
- 下一篇: java中 移位运算_java中关于移位