gen gid only in dtm

This commit is contained in:
yedongfu 2021-07-01 16:45:39 +08:00
parent 2dc5e7ce88
commit 89879aba1a
12 changed files with 31 additions and 25 deletions

View File

@ -37,10 +37,9 @@ DTM 是一款跨语言的分布式事务管理方案,在各类微服务架构
``` go
const DtmServer = "http://localhost:8080/api/dtmsvr"
const startBusi = "http://localhost:8081/api/busi_saga"
gid := common.GenGid() // 生成事务id
req := &gin.H{"amount": 30} // 微服务的负荷
// 生成dtm的saga对象
saga := dtm.SagaNew(DtmServer, gid).
saga := dtm.SagaNew(DtmServer).
// 添加两个子事务
Add(startBusi+"/TransOut", startBusi+"/TransOutCompensate", req).
Add(startBusi+"/TransIn", startBusi+"/TransInCompensate", req)

View File

@ -22,7 +22,7 @@ func Prepare(c *gin.Context) (interface{}, error) {
m := TransFromContext(c)
m.Status = "prepared"
m.SaveNew(dbGet())
return M{"message": "SUCCESS"}, nil
return M{"message": "SUCCESS", "gid": m.Gid}, nil
}
func Commit(c *gin.Context) (interface{}, error) {
@ -31,7 +31,7 @@ func Commit(c *gin.Context) (interface{}, error) {
m.Status = "committed"
m.SaveNew(db)
go m.Process(db)
return M{"message": "SUCCESS"}, nil
return M{"message": "SUCCESS", "gid": m.Gid}, nil
}
func Rollback(c *gin.Context) (interface{}, error) {

View File

@ -209,29 +209,32 @@ func sagaCommittedPending(t *testing.T) {
func genMsg(gid string) *dtm.Msg {
logrus.Printf("beginning a msg test ---------------- %s", gid)
msg := dtm.MsgNew(examples.DtmServer, gid)
msg := dtm.MsgNew(examples.DtmServer)
msg.QueryPrepared = examples.MsgBusi + "/TransQuery"
req := examples.GenTransReq(30, false, false)
msg.Add(examples.MsgBusi+"/TransOut", &req)
msg.Add(examples.MsgBusi+"/TransIn", &req)
msg.Gid = gid
return msg
}
func genSaga(gid string, outFailed bool, inFailed bool) *dtm.Saga {
logrus.Printf("beginning a saga test ---------------- %s", gid)
saga := dtm.SagaNew(examples.DtmServer, gid)
saga := dtm.SagaNew(examples.DtmServer)
req := examples.GenTransReq(30, outFailed, inFailed)
saga.Add(examples.SagaBusi+"/TransOut", examples.SagaBusi+"/TransOutCompensate", &req)
saga.Add(examples.SagaBusi+"/TransIn", examples.SagaBusi+"/TransInCompensate", &req)
saga.Gid = gid
return saga
}
func genTcc(gid string, outFailed bool, inFailed bool) *dtm.Tcc {
logrus.Printf("beginning a tcc test ---------------- %s", gid)
tcc := dtm.TccNew(examples.DtmServer, gid)
tcc := dtm.TccNew(examples.DtmServer)
req := examples.GenTransReq(30, outFailed, inFailed)
tcc.Add(examples.TccBusi+"/TransOutTry", examples.TccBusi+"/TransOutConfirm", examples.TccBusi+"/TransOutCancel", &req)
tcc.Add(examples.TccBusi+"/TransInTry", examples.TccBusi+"/TransInConfirm", examples.TccBusi+"/TransInCancel", &req)
tcc.Gid = gid
return tcc
}

View File

@ -125,6 +125,9 @@ func (t *TransGlobal) setNextCron(expireIn int64) []string {
}
func (t *TransGlobal) SaveNew(db *common.DB) {
if t.Gid == "" {
t.Gid = common.GenGid()
}
err := db.Transaction(func(db1 *gorm.DB) error {
db := &common.DB{DB: db1}
updates := t.setNextCron(config.TransCronInterval)

View File

@ -29,14 +29,13 @@ func MsgStartSvr() {
}
func MsgFireRequest() {
gid := common.GenGid()
logrus.Printf("busi transaction begin: %s", gid)
logrus.Printf("a busi transaction begin")
req := &TransReq{
Amount: 30,
TransInResult: "SUCCESS",
TransOutResult: "SUCCESS",
}
msg := dtm.MsgNew(DtmServer, gid).
msg := dtm.MsgNew(DtmServer).
Add(MsgBusi+"/TransOut", req).
Add(MsgBusi+"/TransIn", req)
err := msg.Prepare(MsgBusi + "/TransQuery")

View File

@ -29,18 +29,18 @@ func SagaStartSvr() {
}
func SagaFireRequest() {
gid := common.GenGid()
logrus.Printf("busi transaction begin: %s", gid)
logrus.Printf("a busi transaction begin")
req := &TransReq{
Amount: 30,
TransInResult: "SUCCESS",
TransOutResult: "SUCCESS",
}
saga := dtm.SagaNew(DtmServer, gid).
saga := dtm.SagaNew(DtmServer).
Add(SagaBusi+"/TransOut", SagaBusi+"/TransOutCompensate", req).
Add(SagaBusi+"/TransIn", SagaBusi+"/TransInCompensate", req)
logrus.Printf("busi trans commit")
err := saga.Commit()
logrus.Printf("result gid is: %s", saga.Gid)
e2p(err)
}

View File

@ -29,14 +29,13 @@ func TccStartSvr() {
}
func TccFireRequest() {
gid := common.GenGid()
logrus.Printf("busi transaction begin: %s", gid)
logrus.Printf("a busi transaction begin")
req := &TransReq{
Amount: 30,
TransInResult: "SUCCESS",
TransOutResult: "SUCCESS",
}
tcc := dtm.TccNew(DtmServer, gid).
tcc := dtm.TccNew(DtmServer).
Add(TccBusi+"/TransOutTry", TccBusi+"/TransOutConfirm", TccBusi+"/TransOutCancel", req).
Add(TccBusi+"/TransInTry", TccBusi+"/TransInConfirm", TccBusi+"/TransOutCancel", req)
logrus.Printf("busi trans commit")

View File

@ -29,9 +29,8 @@ func startStartSvr() {
}
func startFireRequest() {
gid := common.GenGid()
req := &gin.H{"amount": 30}
saga := dtm.SagaNew(DtmServer, gid).
saga := dtm.SagaNew(DtmServer).
Add(startBusi+"/TransOut", startBusi+"/TransOutCompensate", req).
Add(startBusi+"/TransIn", startBusi+"/TransInCompensate", req)
err := saga.Commit()

2
go.mod
View File

@ -10,7 +10,7 @@ require (
github.com/go-resty/resty/v2 v2.6.0
github.com/golang/protobuf v1.4.2 // indirect
github.com/google/go-cmp v0.5.5 // indirect
github.com/json-iterator/go v1.1.10 // indirect
github.com/json-iterator/go v1.1.10
github.com/sirupsen/logrus v1.7.0
github.com/spf13/viper v1.7.1
github.com/stretchr/testify v1.7.0 // indirect

View File

@ -3,6 +3,7 @@ package dtm
import (
"fmt"
jsonitor "github.com/json-iterator/go"
"github.com/sirupsen/logrus"
"github.com/yedf/dtm/common"
)
@ -23,10 +24,9 @@ type MsgStep struct {
Data string `json:"data"`
}
func MsgNew(server string, gid string) *Msg {
func MsgNew(server string) *Msg {
return &Msg{
MsgData: MsgData{
Gid: gid,
TransType: "msg",
},
Server: server,
@ -51,6 +51,7 @@ func (s *Msg) Commit() error {
if resp.StatusCode() != 200 {
return fmt.Errorf("commit failed: %v", resp.Body())
}
s.Gid = jsonitor.Get(resp.Body(), "gid").ToString()
return nil
}
@ -64,5 +65,6 @@ func (s *Msg) Prepare(queryPrepared string) error {
if resp.StatusCode() != 200 {
return fmt.Errorf("prepare failed: %v", resp.Body())
}
s.Gid = jsonitor.Get(resp.Body(), "gid").ToString()
return nil
}

View File

@ -3,6 +3,7 @@ package dtm
import (
"fmt"
jsonitor "github.com/json-iterator/go"
"github.com/sirupsen/logrus"
"github.com/yedf/dtm/common"
)
@ -23,10 +24,9 @@ type SagaStep struct {
Data string `json:"data"`
}
func SagaNew(server string, gid string) *Saga {
func SagaNew(server string) *Saga {
return &Saga{
SagaData: SagaData{
Gid: gid,
TransType: "saga",
},
Server: server,
@ -52,5 +52,6 @@ func (s *Saga) Commit() error {
if resp.StatusCode() != 200 {
return fmt.Errorf("commit failed: %v", resp.Body())
}
s.Gid = jsonitor.Get(resp.Body(), "gid").ToString()
return nil
}

5
tcc.go
View File

@ -3,6 +3,7 @@ package dtm
import (
"fmt"
jsonitor "github.com/json-iterator/go"
"github.com/sirupsen/logrus"
"github.com/yedf/dtm/common"
)
@ -24,10 +25,9 @@ type TccStep struct {
Data string `json:"data"`
}
func TccNew(server string, gid string) *Tcc {
func TccNew(server string) *Tcc {
return &Tcc{
TccData: TccData{
Gid: gid,
TransType: "tcc",
},
Server: server,
@ -54,5 +54,6 @@ func (s *Tcc) Commit() error {
if resp.StatusCode() != 200 {
return fmt.Errorf("commit failed: %v", resp.Body())
}
s.Gid = jsonitor.Get(resp.Body(), "gid").ToString()
return nil
}