func tx() {
tx := settle.Orm()
trans := settle.OrderTrans{}
// 启动协调器
settle.OrderTransandler.Insert(nil, &trans)
// orderDb
orderDb := model.Orm()
orderDb.Exec("XA START '" + cast.ToString(trans.Id) + "';")
err := orderDb.Exec("update order_table set create_time = 1 where id = ?", 1).Error
if err != nil {
fmt.Printf("%#v\n", err.Error())
}
orderDb.Exec("XA END '" + cast.ToString(trans.Id) + "';")
orderDb.Exec("XA PREPARE '" + cast.ToString(trans.Id) + "';")
err = tx.Exec("update order_trans set tx1 = 1 where id = ?", trans.Id).Error
if err != nil {
fmt.Printf("%#v\n", err.Error())
}
// misunDb
misunDb := misun.Orm()
misunDb.Exec("XA START '" + cast.ToString(trans.Id) + "';")
err = misunDb.Exec("update order_table set create_time = 1 where id = ?", 1).Error
if err != nil {
fmt.Printf("%#v\n", err.Error())
}
misunDb.Exec("XA END '" + cast.ToString(trans.Id) + "';")
misunDb.Exec("XA PREPARE '" + cast.ToString(trans.Id) + "';")
err = tx.Exec("update order_trans set tx2 = 1 where id = ?", trans.Id).Error
if err != nil {
fmt.Printf("%#v\n", err.Error())
}
time.Sleep(3 * time.Minute)
// commit
misunDb.Exec("XA COMMIT '" + cast.ToString(trans.Id) + "';")
err = tx.Exec("update order_trans set tx1 = 2 where id = ?", trans.Id).Error
if err != nil {
fmt.Printf("%#v\n", err.Error())
}
orderDb.Exec("XA COMMIT '" + cast.ToString(trans.Id) + "';")
err = tx.Exec("update order_trans set tx2 = 2 where id = ?", trans.Id).Error
if err != nil {
fmt.Printf("%#v\n", err.Error())
}
}
func txCron() {
orderDb := model.Orm()
misunDb := misun.Orm()
list, _ := settle.OrderTransHandler.GetList("tx1 < 1 or tx2 < 1")
for k1 := range list {
misunDb.Exec("XA ROLLBACK '" + cast.ToString(list[k1].Id) + "';")
orderDb.Exec("XA ROLLBACK '" + cast.ToString(list[k1].Id) + "';")
}
list, _ = settle.OrderTransHandler.GetList("tx1 < 2 or tx2 < 2")
for k1 := range list {
if list[k1].Tx1 != 2 {
misunDb.Exec("XA COMMIT '" + cast.ToString(list[k1].Id) + "';")
}
if list[k1].Tx2 != 2 {
orderDb.Exec("XA COMMIT '" + cast.ToString(list[k1].Id) + "';")
}
}
}
MYSQL分布式事物案例
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近项目中需要用到多数据源管,数据访问层采用的是JDBCTemplate去做的,一开始是在数据源这块做了一个多数据...