TCC 基于本地消息表的分布式事务处理
- 介绍分布式系统中的事务问题
- TCC 异步补偿的设计与实现(TODO)
go get github.com/mushroomsir/tcc
Create transaction table by sql/mysql.sql
.
func main() {
tc := tcc.New(&tcc.Option{
PullTaskInterval: 1,
Store: store.NewMysql(&gorm.DB{}),
})
tx := tc.NewTransaction("name")
sql := tx.TryPlan("value")
err := doSomeThing(sql)
if err != nil {
tx.Confirm() // confirm to summit async compensation task
} else {
tx.Cancel() // cancel async compensation task
}
}
func doSomeThing(sql string) error {
// execute sql in transaction
return nil
}