diff --git a/app/main.go b/app/main.go index ac57d90..d6b020e 100644 --- a/app/main.go +++ b/app/main.go @@ -54,6 +54,7 @@ func main() { examples.MsgFireRequest() } else if os.Args[1] == "all" { // 运行所有示例 examples.SagaSetup(app) + examples.SagaWaitSetup(app) examples.TccSetup(app) examples.XaSetup(app) examples.MsgSetup(app) diff --git a/dtmsvr/examples_test.go b/dtmsvr/examples_test.go index 2c2cc0f..6bb38df 100644 --- a/dtmsvr/examples_test.go +++ b/dtmsvr/examples_test.go @@ -13,6 +13,7 @@ func TestExamples(t *testing.T) { assertSucceed(t, examples.MsgFireRequest()) assertSucceed(t, examples.SagaBarrierFireRequest()) assertSucceed(t, examples.SagaFireRequest()) + assertSucceed(t, examples.SagaWaitFireRequest()) assertSucceed(t, examples.TccBarrierFireRequest()) assertSucceed(t, examples.TccFireRequest()) assertSucceed(t, examples.TccFireRequestNested()) diff --git a/examples/main_saga_wait.go b/examples/main_saga_wait.go new file mode 100644 index 0000000..53d040b --- /dev/null +++ b/examples/main_saga_wait.go @@ -0,0 +1,28 @@ +package examples + +import ( + "github.com/gin-gonic/gin" + "github.com/yedf/dtm/dtmcli" +) + +// SagaWaitSetup 1 +func SagaWaitSetup(app *gin.Engine) { +} + +// SagaWaitFireRequest 1 +func SagaWaitFireRequest() string { + dtmcli.Logf("a saga busi transaction begin") + req := &TransReq{ + Amount: 30, + TransInResult: "SUCCESS", + TransOutResult: "SUCCESS", + } + saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). + Add(Busi+"/TransOut", Busi+"/TransOutRevert", req). + Add(Busi+"/TransIn", Busi+"/TransInRevert", req) + saga.WaitResult = true // 设置为等待结果模式,后面的submit调用,会等待服务器处理这个事务。如果Submit正常返回,那么整个全局事务已成功完成 + err := saga.Submit() + dtmcli.Logf("result gid is: %s", saga.Gid) + e2p(err) + return saga.Gid +}