From 91b1ccdc460abac4d3d4b459d1581ae5689a7587 Mon Sep 17 00:00:00 2001 From: yedongfu Date: Sat, 10 Jul 2021 22:18:12 +0800 Subject: [PATCH] add docker-compose run --- Dockerfile | 1 - README.md | 2 +- app/main.go | 16 ++++++++-------- common/types.go | 4 +++- common/utils.go | 6 +++--- compose.yml | 22 ++++++++-------------- 6 files changed, 23 insertions(+), 28 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2a54028..01c750f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,5 +3,4 @@ WORKDIR /app/dtm RUN go env -w GO111MODULE=on RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct EXPOSE 8080 -ENV IS_DOCKER 1 CMD [ "/bin/bash", "-c", "go build app/main.go && /app/dtm/main" ] diff --git a/README.md b/README.md index 7f6bbbc..33bd3ac 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ DTM是首款golang的分布式事务管理器,优雅的解决了幂等、空 `cp conf.sample.yml conf.yml # 修改conf.yml` ### 启动并运行saga示例 -`go run app/main.go` +`go run app/main.go saga` # 开始使用 diff --git a/app/main.go b/app/main.go index 4354c10..82a0eae 100644 --- a/app/main.go +++ b/app/main.go @@ -24,12 +24,8 @@ func main() { } app := examples.BaseAppNew() examples.BaseAppSetup(app) - if len(os.Args) == 1 || os.Args[1] == "saga" { // 默认情况下,展示saga例子 - dtmsvr.PopulateMysql() - dtmsvr.MainStart() - examples.SagaSetup(app) - examples.BaseAppStart(app) - examples.SagaFireRequest() + if len(os.Args) == 1 || os.Args[1] == "dtmsvr" { // 只启动dtmsvr + go dtmsvr.MainStart() } else if os.Args[1] == "xa" { // 启动xa示例 dtmsvr.PopulateMysql() dtmsvr.MainStart() @@ -37,8 +33,12 @@ func main() { examples.XaSetup(app) examples.BaseAppStart(app) examples.XaFireRequest() - } else if os.Args[1] == "dtmsvr" { // 只启动dtmsvr - go dtmsvr.MainStart() + } else if os.Args[1] == "saga" { // 启动saga示例 + dtmsvr.PopulateMysql() + dtmsvr.MainStart() + examples.SagaSetup(app) + examples.BaseAppStart(app) + examples.SagaFireRequest() } else if os.Args[1] == "all" { // 运行所有示例 dtmsvr.PopulateMysql() examples.PopulateMysql() diff --git a/common/types.go b/common/types.go index 707a15f..85fd491 100644 --- a/common/types.go +++ b/common/types.go @@ -3,6 +3,7 @@ package common import ( "database/sql" "fmt" + "os" "regexp" "strings" "time" @@ -88,9 +89,10 @@ func (op *tracePlugin) Initialize(db *gorm.DB) (err error) { } func GetDsn(conf map[string]string) string { - if IsDocker() { + if IsDockerCompose() { conf["host"] = strings.Replace(conf["host"], "localhost", "host.docker.internal", 1) } + logrus.Printf("is docker: %t IS_DOCKER_COMPOSE: %s and conf host: %s", IsDockerCompose(), os.Getenv("IS_DOCKER_COMPOSE"), conf["host"]) return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Local", conf["user"], conf["password"], conf["host"], conf["port"], conf["database"]) } diff --git a/common/utils.go b/common/utils.go index 65dd3a9..8455777 100644 --- a/common/utils.go +++ b/common/utils.go @@ -188,7 +188,7 @@ func init() { // RestyClient.SetRetryCount(2) // RestyClient.SetRetryWaitTime(1 * time.Second) RestyClient.OnBeforeRequest(func(c *resty.Client, r *resty.Request) error { - if IsDocker() { + if IsDockerCompose() { r.URL = strings.Replace(r.URL, "localhost", "host.docker.internal", 1) } logrus.Printf("requesting: %s %s %v %v", r.Method, r.URL, r.Body, r.QueryParam) @@ -273,6 +273,6 @@ func GetFuncName() string { return runtime.FuncForPC(pc).Name() } -func IsDocker() bool { - return os.Getenv("IS_DOCKER") != "" +func IsDockerCompose() bool { + return os.Getenv("IS_DOCKER_COMPOSE") != "" } diff --git a/compose.yml b/compose.yml index c5fef8a..17ec54e 100644 --- a/compose.yml +++ b/compose.yml @@ -1,5 +1,13 @@ version: '3.3' services: + api: + build: . + environment: + IS_DOCKER_COMPOSE: '1' + ports: + - '80:4005' + volumes: + - .:/app/dtm mysql: image: 'mysql:5.7' environment: @@ -13,17 +21,3 @@ services: ] ports: - '3306:3306' -services: - dtm: - image: 'mysql:5.7' - environment: - MYSQL_ROOT_PASSWORD: my-secret-pw - TZ: Asia/shanghai - command: - [ - '--character-set-server=utf8mb4', - '--collation-server=utf8mb4_unicode_ci', - '--default-time-zone=+8:00', - ] - ports: - - '3306:3306' \ No newline at end of file