examples setup refactored

This commit is contained in:
yedf2 2021-08-11 13:52:40 +08:00
parent b8127df92a
commit 4218256c19
8 changed files with 45 additions and 55 deletions

View File

@ -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])

View File

@ -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)
}

View File

@ -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()

View File

@ -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,10 +12,11 @@ import (
// XaGrpcClient XA client connection
var XaGrpcClient *dtmgrpc.XaGrpcClient = nil
// XaGrpcSetup 挂载http的api创建XaClient
func XaGrpcSetup() {
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) {
err := XaGrpcClient.HandleCallback(in.Info.Gid, in.Info.BranchID, in.Info.BranchType)

View File

@ -21,14 +21,15 @@ func SagaBarrierFireRequest() string {
return saga.Gid
}
// SagaBarrierAddRoute 1
func SagaBarrierAddRoute(app *gin.Engine) {
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) {
_, err := dtmcli.StxExec(sdb, "update dtm_busi.user_account set balance = balance + ? where user_id = ?", amount, uid)

View File

@ -7,8 +7,8 @@ import (
"github.com/yedf/dtm/dtmcli"
)
// TccSetup 1
func TccSetup(app *gin.Engine) {
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)
@ -16,6 +16,7 @@ func TccSetup(app *gin.Engine) {
return tcc.CallBranch(&TransReq{Amount: reqFrom(c).Amount}, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert")
}))
}
}
// TccFireRequestNested 1
func TccFireRequestNested() string {

View File

@ -25,8 +25,8 @@ func TccBarrierFireRequest() string {
return gid
}
// TccBarrierAddRoute 1
func TccBarrierAddRoute(app *gin.Engine) {
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))
@ -35,6 +35,7 @@ func TccBarrierAddRoute(app *gin.Engine) {
app.POST(BusiAPI+"/TccBTransOutCancel", common.WrapHandler(TccBarrierTransOutCancel))
dtmcli.Logf("examples listening at %d", BusiPort)
}
}
const transInUID = 1
const transOutUID = 2

View File

@ -10,8 +10,8 @@ import (
// XaClient XA client connection
var XaClient *dtmcli.XaClient = nil
// XaSetup 挂载http的api创建XaClient
func XaSetup(app *gin.Engine) {
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) {
@ -20,6 +20,7 @@ func XaSetup(app *gin.Engine) {
})
e2p(err)
}
}
// XaFireRequest 注册全局XA事务调用XA的分支
func XaFireRequest() string {