Browse Source

update examples

pull/295/head
yedf2 4 years ago
parent
commit
1d7f5e707e
  1. 2
      README.md
  2. 2
      helper/README-cn.md
  3. 2
      helper/README-en.md
  4. 2
      helper/bench/svr/http.go
  5. 34
      test/busi/barrier.go
  6. 3
      test/busi/quick_start.go

2
README.md

@ -56,7 +56,7 @@ go run main.go
DtmServer := "http://localhost:36789/api/dtmsvr" DtmServer := "http://localhost:36789/api/dtmsvr"
req := &gin.H{"amount": 30} // micro-service payload req := &gin.H{"amount": 30} // micro-service payload
// DtmServer is the address of DTM micro-service // DtmServer is the address of DTM micro-service
saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). saga := dtmcli.NewSaga(DtmServer, shortuuid.New()).
// add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCom" // add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCom"
Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req). Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req).
// add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCom" // add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCom"

2
helper/README-cn.md

@ -85,7 +85,7 @@ go run main.go
req := &gin.H{"amount": 30} // 微服务的载荷 req := &gin.H{"amount": 30} // 微服务的载荷
// DtmServer为DTM服务的地址,是一个url // DtmServer为DTM服务的地址,是一个url
DtmServer := "http://localhost:36789/api/dtmsvr" DtmServer := "http://localhost:36789/api/dtmsvr"
saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). saga := dtmcli.NewSaga(DtmServer, shortuuid.New()).
// 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCom" // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCom"
Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req). Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req).
// 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransIn", 补偿操作为url: qsBusi+"/TransInCom" // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransIn", 补偿操作为url: qsBusi+"/TransInCom"

2
helper/README-en.md

@ -56,7 +56,7 @@ go run main.go
DtmServer := "http://localhost:36789/api/dtmsvr" DtmServer := "http://localhost:36789/api/dtmsvr"
req := &gin.H{"amount": 30} // micro-service payload req := &gin.H{"amount": 30} // micro-service payload
// DtmServer is the address of DTM micro-service // DtmServer is the address of DTM micro-service
saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). saga := dtmcli.NewSaga(DtmServer, shortuuid.New()).
// add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCom" // add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCom"
Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req). Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req).
// add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCom" // add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCom"

2
helper/bench/svr/http.go

@ -122,7 +122,7 @@ func qsAdjustBalance(uid int, amount int, c *gin.Context) error { // nolint: unp
if strings.Contains(mode, "barrier") { if strings.Contains(mode, "barrier") {
barrier, err := dtmcli.BarrierFromQuery(c.Request.URL.Query()) barrier, err := dtmcli.BarrierFromQuery(c.Request.URL.Query())
logger.FatalIfError(err) logger.FatalIfError(err)
err = barrier.Call(txGet(), f) err = barrier.CallWithDB(pdbGet(), f)
logger.FatalIfError(err) logger.FatalIfError(err)
} else { } else {
tx := txGet() tx := txGet()

34
test/busi/barrier.go

@ -22,49 +22,49 @@ func init() {
setupFuncs["BarrierSetup"] = func(app *gin.Engine) { setupFuncs["BarrierSetup"] = func(app *gin.Engine) {
app.POST(BusiAPI+"/SagaBTransIn", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/SagaBTransIn", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
barrier := MustBarrierFromGin(c) barrier := MustBarrierFromGin(c)
return barrier.Call(txGet(), func(tx *sql.Tx) error { return barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount, reqFrom(c).TransInResult) return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount, reqFrom(c).TransInResult)
}) })
})) }))
app.POST(BusiAPI+"/SagaBTransInCom", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/SagaBTransInCom", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
barrier := MustBarrierFromGin(c) barrier := MustBarrierFromGin(c)
return barrier.Call(txGet(), func(tx *sql.Tx) error { return barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount, "") return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount, "")
}) })
})) }))
app.POST(BusiAPI+"/SagaB2TransIn", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/SagaB2TransIn", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
barrier := MustBarrierFromGin(c) barrier := MustBarrierFromGin(c)
err := barrier.Call(txGet(), func(tx *sql.Tx) error { err := barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount/2, reqFrom(c).TransInResult) return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount/2, reqFrom(c).TransInResult)
}) })
if err != nil { if err != nil {
return err return err
} }
return barrier.Call(txGet(), func(tx *sql.Tx) error { return barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount/2, reqFrom(c).TransInResult) return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount/2, reqFrom(c).TransInResult)
}) })
})) }))
app.POST(BusiAPI+"/SagaB2TransInCom", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/SagaB2TransInCom", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
barrier := MustBarrierFromGin(c) barrier := MustBarrierFromGin(c)
err := barrier.Call(txGet(), func(tx *sql.Tx) error { err := barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount/2, "") return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount/2, "")
}) })
if err != nil { if err != nil {
return err return err
} }
return barrier.Call(txGet(), func(tx *sql.Tx) error { return barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount, "") return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount, "")
}) })
})) }))
app.POST(BusiAPI+"/SagaBTransOut", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/SagaBTransOut", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
barrier := MustBarrierFromGin(c) barrier := MustBarrierFromGin(c)
return barrier.Call(txGet(), func(tx *sql.Tx) error { return barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransOutUID, -reqFrom(c).Amount, reqFrom(c).TransOutResult) return SagaAdjustBalance(tx, TransOutUID, -reqFrom(c).Amount, reqFrom(c).TransOutResult)
}) })
})) }))
app.POST(BusiAPI+"/SagaBTransOutCom", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/SagaBTransOutCom", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
barrier := MustBarrierFromGin(c) barrier := MustBarrierFromGin(c)
return barrier.Call(txGet(), func(tx *sql.Tx) error { return barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return SagaAdjustBalance(tx, TransOutUID, reqFrom(c).Amount, "") return SagaAdjustBalance(tx, TransOutUID, reqFrom(c).Amount, "")
}) })
})) }))
@ -82,17 +82,17 @@ func init() {
if req.TransInResult != "" { if req.TransInResult != "" {
return dtmcli.String2DtmError(req.TransInResult) return dtmcli.String2DtmError(req.TransInResult)
} }
return MustBarrierFromGin(c).Call(txGet(), func(tx *sql.Tx) error { return MustBarrierFromGin(c).CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return tccAdjustTrading(tx, TransInUID, req.Amount) return tccAdjustTrading(tx, TransInUID, req.Amount)
}) })
})) }))
app.POST(BusiAPI+"/TccBTransInConfirm", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/TccBTransInConfirm", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
return MustBarrierFromGin(c).Call(txGet(), func(tx *sql.Tx) error { return MustBarrierFromGin(c).CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return tccAdjustBalance(tx, TransInUID, reqFrom(c).Amount) return tccAdjustBalance(tx, TransInUID, reqFrom(c).Amount)
}) })
})) }))
app.POST(BusiAPI+"/TccBTransInCancel", dtmutil.WrapHandler(func(c *gin.Context) interface{} { app.POST(BusiAPI+"/TccBTransInCancel", dtmutil.WrapHandler(func(c *gin.Context) interface{} {
return MustBarrierFromGin(c).Call(txGet(), func(tx *sql.Tx) error { return MustBarrierFromGin(c).CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return tccAdjustTrading(tx, TransInUID, -reqFrom(c).Amount) return tccAdjustTrading(tx, TransInUID, -reqFrom(c).Amount)
}) })
})) }))
@ -170,7 +170,7 @@ func init() {
}) })
} }
return bb.Call(txGet(), func(tx *sql.Tx) error { return bb.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return tccAdjustTrading(tx, TransOutUID, -req.Amount) return tccAdjustTrading(tx, TransOutUID, -req.Amount)
}) })
})) }))
@ -178,7 +178,7 @@ func init() {
if reqFrom(c).Store == Redis || reqFrom(c).Store == Mongo { if reqFrom(c).Store == Redis || reqFrom(c).Store == Mongo {
return nil return nil
} }
return MustBarrierFromGin(c).Call(txGet(), func(tx *sql.Tx) error { return MustBarrierFromGin(c).CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return tccAdjustBalance(tx, TransOutUID, -reqFrom(c).Amount) return tccAdjustBalance(tx, TransOutUID, -reqFrom(c).Amount)
}) })
})) }))
@ -198,7 +198,7 @@ func TccBarrierTransOutCancel(c *gin.Context) interface{} {
return SagaMongoAdjustBalance(sc, sc.Client(), TransOutUID, reqFrom(c).Amount, "") return SagaMongoAdjustBalance(sc, sc.Client(), TransOutUID, reqFrom(c).Amount, "")
}) })
} }
return bb.Call(txGet(), func(tx *sql.Tx) error { return bb.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return tccAdjustTrading(tx, TransOutUID, reqFrom(c).Amount) return tccAdjustTrading(tx, TransOutUID, reqFrom(c).Amount)
}) })
} }
@ -212,21 +212,21 @@ func (s *busiServer) TransInBSaga(ctx context.Context, in *BusiReq) (*emptypb.Em
func (s *busiServer) TransOutBSaga(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) { func (s *busiServer) TransOutBSaga(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) {
barrier := MustBarrierFromGrpc(ctx) barrier := MustBarrierFromGrpc(ctx)
return &emptypb.Empty{}, barrier.Call(txGet(), func(tx *sql.Tx) error { return &emptypb.Empty{}, barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return sagaGrpcAdjustBalance(tx, TransOutUID, -in.Amount, in.TransOutResult) return sagaGrpcAdjustBalance(tx, TransOutUID, -in.Amount, in.TransOutResult)
}) })
} }
func (s *busiServer) TransInRevertBSaga(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) { func (s *busiServer) TransInRevertBSaga(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) {
barrier := MustBarrierFromGrpc(ctx) barrier := MustBarrierFromGrpc(ctx)
return &emptypb.Empty{}, barrier.Call(txGet(), func(tx *sql.Tx) error { return &emptypb.Empty{}, barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return sagaGrpcAdjustBalance(tx, TransInUID, -in.Amount, "") return sagaGrpcAdjustBalance(tx, TransInUID, -in.Amount, "")
}) })
} }
func (s *busiServer) TransOutRevertBSaga(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) { func (s *busiServer) TransOutRevertBSaga(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) {
barrier := MustBarrierFromGrpc(ctx) barrier := MustBarrierFromGrpc(ctx)
return &emptypb.Empty{}, barrier.Call(txGet(), func(tx *sql.Tx) error { return &emptypb.Empty{}, barrier.CallWithDB(pdbGet(), func(tx *sql.Tx) error {
return sagaGrpcAdjustBalance(tx, TransOutUID, in.Amount, "") return sagaGrpcAdjustBalance(tx, TransOutUID, in.Amount, "")
}) })
} }

3
test/busi/quick_start.go

@ -7,6 +7,7 @@ import (
"github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/lithammer/shortuuid/v3"
) )
// busi address // busi address
@ -59,7 +60,7 @@ const dtmServer = "http://localhost:36789/api/dtmsvr"
func QsFireRequest() string { func QsFireRequest() string {
req := &gin.H{"amount": 30} // load of micro-service req := &gin.H{"amount": 30} // load of micro-service
// DtmServer is the url of dtm // DtmServer is the url of dtm
saga := dtmcli.NewSaga(dtmServer, dtmcli.MustGenGid(dtmServer)). saga := dtmcli.NewSaga(dtmServer, shortuuid.New()).
// add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCompensate" // add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCompensate"
Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req).
// add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCompensate" // add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCompensate"

Loading…
Cancel
Save