From 4218256c19f4735dedec053760aa15ba35621f73 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Wed, 11 Aug 2021 13:52:40 +0800 Subject: [PATCH] examples setup refactored --- app/main.go | 14 +------------- dtmsvr/api_grpc.go | 1 + dtmsvr/dtmsvr_test.go | 7 +------ examples/main_grpc_xa.go | 8 +++++--- examples/main_saga_barrier.go | 15 ++++++++------- examples/main_tcc.go | 17 +++++++++-------- examples/main_tcc_barrier.go | 19 ++++++++++--------- examples/main_xa.go | 19 ++++++++++--------- 8 files changed, 45 insertions(+), 55 deletions(-) diff --git a/app/main.go b/app/main.go index 1984ef1..134d88d 100644 --- a/app/main.go +++ b/app/main.go @@ -40,38 +40,26 @@ func main() { } // 下面是各类的例子 - app := examples.BaseAppStartup() + examples.BaseAppStartup() examples.GrpcStartup() if os.Args[1] == "xa" { // 启动xa示例 - examples.XaSetup(app) examples.XaFireRequest() } else if os.Args[1] == "saga" { // 启动saga示例 - examples.SagaSetup(app) examples.SagaFireRequest() } else if os.Args[1] == "tcc" { // 启动tcc示例 - examples.TccSetup(app) examples.TccFireRequestNested() } else if os.Args[1] == "msg" { // 启动msg示例 - examples.MsgSetup(app) examples.MsgFireRequest() } else if os.Args[1] == "msg_grpc" { // 启动msg示例 - examples.MsgGrpcSetup(app) examples.MsgGrpcFireRequest() } else if os.Args[1] == "all" { // 运行所有示例 - examples.SagaSetup(app) - examples.SagaWaitSetup(app) - examples.TccSetup(app) - examples.XaSetup(app) - examples.MsgSetup(app) examples.SagaFireRequest() examples.TccFireRequestNested() examples.XaFireRequest() examples.MsgFireRequest() } else if os.Args[1] == "saga_barrier" { - examples.SagaBarrierAddRoute(app) examples.SagaBarrierFireRequest() } else if os.Args[1] == "tcc_barrier" { - examples.TccBarrierAddRoute(app) examples.TccBarrierFireRequest() } else { dtmcli.LogRedf("unknown arg: %s", os.Args[1]) diff --git a/dtmsvr/api_grpc.go b/dtmsvr/api_grpc.go index 06b4e42..e077ed3 100644 --- a/dtmsvr/api_grpc.go +++ b/dtmsvr/api_grpc.go @@ -49,6 +49,7 @@ func (s *dtmServer) RegisterXaBranch(ctx context.Context, in *pb.DtmXaBranchRequ BranchID: in.Info.BranchID, Status: "prepared", Data: in.BusiData, + URL: in.Notify, }) return &emptypb.Empty{}, dtmgrpc.Result2Error(r, err) } diff --git a/dtmsvr/dtmsvr_test.go b/dtmsvr/dtmsvr_test.go index 67cb2e8..d65796f 100644 --- a/dtmsvr/dtmsvr_test.go +++ b/dtmsvr/dtmsvr_test.go @@ -46,13 +46,8 @@ func TestMain(m *testing.M) { examples.PopulateDB(false) // 启动组件 go StartSvr() - app = examples.BaseAppStartup() examples.GrpcStartup() - examples.XaGrpcSetup() - examples.TccSetup(app) - examples.XaSetup(app) - examples.TccBarrierAddRoute(app) - examples.SagaBarrierAddRoute(app) + app = examples.BaseAppStartup() resetXaData() m.Run() diff --git a/examples/main_grpc_xa.go b/examples/main_grpc_xa.go index 27b0482..f1a596d 100644 --- a/examples/main_grpc_xa.go +++ b/examples/main_grpc_xa.go @@ -3,6 +3,7 @@ package examples import ( context "context" + "github.com/gin-gonic/gin" "github.com/yedf/dtm/dtmcli" "github.com/yedf/dtm/dtmgrpc" emptypb "google.golang.org/protobuf/types/known/emptypb" @@ -11,9 +12,10 @@ import ( // XaGrpcClient XA client connection var XaGrpcClient *dtmgrpc.XaGrpcClient = nil -// XaGrpcSetup 挂载http的api,创建XaClient -func XaGrpcSetup() { - XaGrpcClient = dtmgrpc.NewXaGrpcClient(DtmGrpcServer, config.DB, BusiGrpc+"/examples.Busi/XaNotify") +func init() { + setupFuncs["XaGrpcSetup"] = func(app *gin.Engine) { + XaGrpcClient = dtmgrpc.NewXaGrpcClient(DtmGrpcServer, config.DB, BusiGrpc+"/examples.Busi/XaNotify") + } } func (s *busiServer) XaNotify(ctx context.Context, in *dtmgrpc.BusiRequest) (*emptypb.Empty, error) { diff --git a/examples/main_saga_barrier.go b/examples/main_saga_barrier.go index 133d7f8..e044b16 100644 --- a/examples/main_saga_barrier.go +++ b/examples/main_saga_barrier.go @@ -21,13 +21,14 @@ func SagaBarrierFireRequest() string { return saga.Gid } -// SagaBarrierAddRoute 1 -func SagaBarrierAddRoute(app *gin.Engine) { - app.POST(BusiAPI+"/SagaBTransIn", common.WrapHandler(sagaBarrierTransIn)) - app.POST(BusiAPI+"/SagaBTransInCompensate", common.WrapHandler(sagaBarrierTransInCompensate)) - app.POST(BusiAPI+"/SagaBTransOut", common.WrapHandler(sagaBarrierTransOut)) - app.POST(BusiAPI+"/SagaBTransOutCompensate", common.WrapHandler(sagaBarrierTransOutCompensate)) - dtmcli.Logf("examples listening at %d", BusiPort) +func init() { + setupFuncs["SagaBarrierSetup"] = func(app *gin.Engine) { + app.POST(BusiAPI+"/SagaBTransIn", common.WrapHandler(sagaBarrierTransIn)) + app.POST(BusiAPI+"/SagaBTransInCompensate", common.WrapHandler(sagaBarrierTransInCompensate)) + app.POST(BusiAPI+"/SagaBTransOut", common.WrapHandler(sagaBarrierTransOut)) + app.POST(BusiAPI+"/SagaBTransOutCompensate", common.WrapHandler(sagaBarrierTransOutCompensate)) + dtmcli.Logf("examples listening at %d", BusiPort) + } } func sagaBarrierAdjustBalance(sdb *sql.Tx, uid int, amount int) (interface{}, error) { diff --git a/examples/main_tcc.go b/examples/main_tcc.go index ad574c1..893f115 100644 --- a/examples/main_tcc.go +++ b/examples/main_tcc.go @@ -7,14 +7,15 @@ import ( "github.com/yedf/dtm/dtmcli" ) -// TccSetup 1 -func TccSetup(app *gin.Engine) { - app.POST(BusiAPI+"/TransInTccParent", common.WrapHandler(func(c *gin.Context) (interface{}, error) { - tcc, err := dtmcli.TccFromQuery(c.Request.URL.Query()) - e2p(err) - dtmcli.Logf("TransInTccParent ") - return tcc.CallBranch(&TransReq{Amount: reqFrom(c).Amount}, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert") - })) +func init() { + setupFuncs["TccSetupSetup"] = func(app *gin.Engine) { + app.POST(BusiAPI+"/TransInTccParent", common.WrapHandler(func(c *gin.Context) (interface{}, error) { + tcc, err := dtmcli.TccFromQuery(c.Request.URL.Query()) + e2p(err) + dtmcli.Logf("TransInTccParent ") + return tcc.CallBranch(&TransReq{Amount: reqFrom(c).Amount}, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert") + })) + } } // TccFireRequestNested 1 diff --git a/examples/main_tcc_barrier.go b/examples/main_tcc_barrier.go index c5e8eba..d2eb33f 100644 --- a/examples/main_tcc_barrier.go +++ b/examples/main_tcc_barrier.go @@ -25,15 +25,16 @@ func TccBarrierFireRequest() string { return gid } -// TccBarrierAddRoute 1 -func TccBarrierAddRoute(app *gin.Engine) { - app.POST(BusiAPI+"/TccBTransInTry", common.WrapHandler(tccBarrierTransInTry)) - app.POST(BusiAPI+"/TccBTransInConfirm", common.WrapHandler(tccBarrierTransInConfirm)) - app.POST(BusiAPI+"/TccBTransInCancel", common.WrapHandler(tccBarrierTransInCancel)) - app.POST(BusiAPI+"/TccBTransOutTry", common.WrapHandler(tccBarrierTransOutTry)) - app.POST(BusiAPI+"/TccBTransOutConfirm", common.WrapHandler(tccBarrierTransOutConfirm)) - app.POST(BusiAPI+"/TccBTransOutCancel", common.WrapHandler(TccBarrierTransOutCancel)) - dtmcli.Logf("examples listening at %d", BusiPort) +func init() { + setupFuncs["TccBarrierSetup"] = func(app *gin.Engine) { + app.POST(BusiAPI+"/TccBTransInTry", common.WrapHandler(tccBarrierTransInTry)) + app.POST(BusiAPI+"/TccBTransInConfirm", common.WrapHandler(tccBarrierTransInConfirm)) + app.POST(BusiAPI+"/TccBTransInCancel", common.WrapHandler(tccBarrierTransInCancel)) + app.POST(BusiAPI+"/TccBTransOutTry", common.WrapHandler(tccBarrierTransOutTry)) + app.POST(BusiAPI+"/TccBTransOutConfirm", common.WrapHandler(tccBarrierTransOutConfirm)) + app.POST(BusiAPI+"/TccBTransOutCancel", common.WrapHandler(TccBarrierTransOutCancel)) + dtmcli.Logf("examples listening at %d", BusiPort) + } } const transInUID = 1 diff --git a/examples/main_xa.go b/examples/main_xa.go index c1783ec..1369e33 100644 --- a/examples/main_xa.go +++ b/examples/main_xa.go @@ -10,15 +10,16 @@ import ( // XaClient XA client connection var XaClient *dtmcli.XaClient = nil -// XaSetup 挂载http的api,创建XaClient -func XaSetup(app *gin.Engine) { - var err error - XaClient, err = dtmcli.NewXaClient(DtmServer, config.DB, Busi+"/xa", func(path string, xa *dtmcli.XaClient) { - app.POST(path, common.WrapHandler(func(c *gin.Context) (interface{}, error) { - return xa.HandleCallback(c.Query("gid"), c.Query("branch_id"), c.Query("branch_type")) - })) - }) - e2p(err) +func init() { + setupFuncs["XaSetup"] = func(app *gin.Engine) { + var err error + XaClient, err = dtmcli.NewXaClient(DtmServer, config.DB, Busi+"/xa", func(path string, xa *dtmcli.XaClient) { + app.POST(path, common.WrapHandler(func(c *gin.Context) (interface{}, error) { + return xa.HandleCallback(c.Query("gid"), c.Query("branch_id"), c.Query("branch_type")) + })) + }) + e2p(err) + } } // XaFireRequest 注册全局XA事务,调用XA的分支