From 9e48e767b34fb36aeb4eedd1ddc38eca8faeeadc Mon Sep 17 00:00:00 2001 From: yedongfu Date: Mon, 17 May 2021 15:09:05 +0800 Subject: [PATCH] rabbitmq seems ok --- .gitignore | 2 +- README-cn.md | 2 +- common/config.go | 16 -------- dtm_test.go | 17 ++++++-- examples/saga.go | 104 ++++++++++++++++++++++++++--------------------- go.mod | 3 ++ go.sum | 4 ++ service/route.go | 7 ---- service/trans.go | 9 ---- tc.go | 15 ------- 10 files changed, 80 insertions(+), 99 deletions(-) delete mode 100644 common/config.go delete mode 100644 service/route.go delete mode 100644 service/trans.go delete mode 100644 tc.go diff --git a/.gitignore b/.gitignore index 33540ec..3379b22 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -dtm.yml +dtmsvr/dtmsvr.yml diff --git a/README-cn.md b/README-cn.md index 5590d73..571df85 100644 --- a/README-cn.md +++ b/README-cn.md @@ -6,7 +6,7 @@ dtm依赖于rabbitmq和mysql,请搭建好rabbitmq和mysql,并修改dtm.yml ## 启动tc -```go run tc``` +```go run dtm-svr/svr``` ## 启动例子saga的tm+rm diff --git a/common/config.go b/common/config.go deleted file mode 100644 index 5ebe6ce..0000000 --- a/common/config.go +++ /dev/null @@ -1,16 +0,0 @@ -package common - -import ( - "path/filepath" - "runtime" - - "github.com/spf13/viper" -) - -func LoadConfig() { - _, file, _, _ := runtime.Caller(0) - viper.SetConfigFile(filepath.Dir(file) + "/../dtm.yml") - if err := viper.ReadInConfig(); err != nil { - panic(err) - } -} diff --git a/dtm_test.go b/dtm_test.go index 03295a1..f241c9d 100644 --- a/dtm_test.go +++ b/dtm_test.go @@ -5,10 +5,19 @@ import ( "github.com/go-playground/assert/v2" "github.com/spf13/viper" - "github.com/yedf/dtm/common" + "github.com/yedf/dtm/dtmsvr" ) -func TestCtxKey(t *testing.T) { - common.LoadConfig() - assert.Equal(t, "http://localhost:8080/api/dtm/", viper.GetString("tc")) +func init() { + dtmsvr.LoadConfig() +} + +func TestViper(t *testing.T) { + assert.Equal(t, "test_val", viper.GetString("test")) +} + +func TTestDtmSvr(t *testing.T) { + // 发送Prepare请求后,验证数据库 + // ConsumeHalfMsg 验证数据库 + // ConsumeMsg 验证数据库 } diff --git a/examples/saga.go b/examples/saga.go index 7655933..c5dfa2f 100644 --- a/examples/saga.go +++ b/examples/saga.go @@ -1,57 +1,69 @@ -package example +package examples -func TansIn() { +import ( + "fmt" + "github.com/gin-gonic/gin" + "github.com/sirupsen/logrus" + "github.com/yedf/dtm/common" + "github.com/yedf/dtm/dtm" +) + +type TransReq struct { + amount int + transInFailed bool + transOutFailed bool } -func main() { +func TansIn(c *gin.Context) { + gid := c.Query("gid") + req := TransReq{} + if err := c.BindJSON(&req); err != nil { + return + } + logrus.Printf("%s TransIn: %v", gid, req) + if req.transInFailed { + logrus.Printf("%s TransIn %v failed", req) + c.Error(fmt.Errorf("TransIn failed for gid: %s", gid)) + } + c.JSON(200, gin.H{"result": "SUCCESS"}) +} +func TansInCompensate(c *gin.Context) { + gid := c.Query("gid") + req := TransReq{} + if err := c.BindJSON(&req); err != nil { + return + } + logrus.Printf("%s TransInCompensate: %v", gid, req) + c.JSON(200, gin.H{"result": "SUCCESS"}) +} + +func TransQuery(c *gin.Context) { + gid := c.Query("gid") + req := TransReq{} + if err := c.BindJSON(&req); err != nil { + return + } + logrus.Printf("%s TransQuery: %v", gid, req) + c.JSON(200, gin.H{"result": "SUCCESS"}) +} + +func trans(req *TransReq) { + gid := common.GenGid() + logrus.Printf("busi transaction begin: %s", gid) + saga := dtm.Saga{ + Server: TcServer, + Gid: gid, + } + + saga.Add(Busi+"/TransIn", Busi+"/TransInCompensate", req) + saga.Prepare(Busi + "TransQuery") + logrus.Printf("busi trans commit") + saga.Commit() } /* -import { ServiceContext } from "@ivy/api/globals" -import { generateTid } from "@ivy/api/ivy" -import { redis } from "@ivy/api/objects" -import { Saga } from '../../saga-cli' - -async function getGlobalTid() { - return "global-" + await generateTid(redis) -} - -export async function transIn(ctx: ServiceContext) { - let { gid, sid } = ctx.query - let { amount, transIn } = ctx.data - console.log(`gid: ${gid} sid: ${sid} transIn ${amount}`) - if (transIn === 'fail') { - throw { code: "DATA_ERROR", message: "tranIn error FAIL" } - } - return { messag: 'SUCCESS' } -} - -export async function transInCompensate(ctx: ServiceContext) { - let { gid, sid } = ctx.query - let { amount } = ctx.data - console.log(`gid: ${gid} sid: ${sid} tranInCompensate ${amount}`) - return { message: 'SUCCESS' } -} - -export async function transOut(ctx: ServiceContext) { - let { gid, sid } = ctx.query - let { amount, transIn, transOut } = ctx.data - console.log(`gid: ${gid} sid: ${sid} transOut ${amount}`) - if (transOut === 'fail') { - throw { code: "DATA_ERROR", message: "tranIn error FAIL" } - } - return { message: 'SUCCESS' } -} - -export async function transOutCompensate(ctx: ServiceContext) { - let { gid, sid } = ctx.query - let { amount } = ctx.data - console.log(`gid: ${gid} sid: ${sid} tranOutCompensate ${amount}`) - return { message: 'SUCCESS' } -} - export async function transQuery(ctx: ServiceContext) { let { gid } = ctx.query return { message: 'SUCCESS' } diff --git a/go.mod b/go.mod index 6fb4bc6..5b8be8b 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/yedf/dtm go 1.15 require ( + github.com/bwmarrin/snowflake v0.3.0 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/gin-gonic/gin v1.6.3 github.com/go-playground/assert/v2 v2.0.1 @@ -10,11 +11,13 @@ require ( github.com/go-resty/resty/v2 v2.6.0 github.com/joho/godotenv v1.3.0 github.com/json-iterator/go v1.1.10 + github.com/magiconair/properties v1.8.1 // github.com/pkg/errors v0.9.1 // indirect github.com/sirupsen/logrus v1.7.0 github.com/sleagon/ginfmt v1.1.1 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d github.com/spf13/viper v1.7.1 + github.com/streadway/amqp v1.0.0 github.com/stretchr/testify v1.7.0 // google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 // indirect google.golang.org/protobuf v1.26.0 // indirect diff --git a/go.sum b/go.sum index 1c650f8..98609cf 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= +github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -237,6 +239,8 @@ github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= diff --git a/service/route.go b/service/route.go deleted file mode 100644 index 112e60a..0000000 --- a/service/route.go +++ /dev/null @@ -1,7 +0,0 @@ -package service - -import "github.com/gin-gonic/gin" - -func AddRoute(engine *gin.Engine) { - -} diff --git a/service/trans.go b/service/trans.go deleted file mode 100644 index 5bbf242..0000000 --- a/service/trans.go +++ /dev/null @@ -1,9 +0,0 @@ -package service - -import ( - "github.com/gin-gonic/gin" -) - -func Prepare(c *gin.Context) { - -} diff --git a/tc.go b/tc.go deleted file mode 100644 index ef25e25..0000000 --- a/tc.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import ( - "github.com/gin-gonic/gin" - "github.com/sirupsen/logrus" - "github.com/yedf/dtm/service" -) - -func main() { - logrus.Printf("start tc") - gin.SetMode(gin.ReleaseMode) - app := gin.Default() - service.AddRoute(app) - app.Run() -}