docker run ok

This commit is contained in:
yedongfu 2021-06-03 15:11:03 +08:00
parent 711823fc31
commit 1fb57472e7
9 changed files with 46 additions and 42 deletions

View File

@ -3,4 +3,4 @@ WORKDIR /app/dtm
RUN go env -w GO111MODULE=on RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
EXPOSE 8080 EXPOSE 8080
CMD [ "/bin/bash", "-c", "go build app/main.go && /app/dtm/main dtmsvr" ] CMD [ "/bin/bash", "-c", "go build app/main.go && /app/dtm/main" ]

View File

@ -13,9 +13,10 @@ type M = map[string]interface{}
func main() { func main() {
if len(os.Args) == 1 { // 默认情况下展示saga例子 if len(os.Args) == 1 { // 默认情况下展示saga例子
examples.PopulateMysql() dtmsvr.PopulateMysql()
go dtmsvr.StartSvr() go dtmsvr.StartSvr()
go examples.SagaStartSvr() go examples.SagaStartSvr()
time.Sleep(100 * time.Millisecond)
examples.SagaFireRequest() examples.SagaFireRequest()
} else if os.Args[1] == "dtmsvr" { } else if os.Args[1] == "dtmsvr" {
go dtmsvr.StartSvr() go dtmsvr.StartSvr()

View File

@ -1,6 +0,0 @@
mysql:
host: 'xxx'
user: 'xxx'
password: 'xxx'
database: 'xxx'
port: '3306'

View File

@ -1,6 +0,0 @@
mysql:
host: 'xxx'
user: 'xxx'
password: 'xxx'
database: 'xxx'
port: '3306'

View File

@ -2,53 +2,58 @@ CREATE DATABASE IF NOT EXISTS `dtm` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use dtm; use dtm;
drop table IF EXISTS saga; drop table IF EXISTS trans_global;
CREATE TABLE IF NOT EXISTS `saga` ( CREATE TABLE if not EXISTS `trans_global` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`gid` varchar(45) NOT NULL COMMENT '事务全局id', `gid` varchar(128) NOT NULL COMMENT '事务全局id',
`steps` json NOT NULL COMMENT 'saga的所有步骤', `trans_type` varchar(45) not null COMMENT '事务类型: saga | xa',
`status` varchar(45) NOT NULL COMMENT '全局事务的状态 prepared | processing | succeed | failed', `data` TEXT COMMENT '事务携带的数据',
`trans_query` varchar(128) NOT NULL COMMENT '事务未决状态的查询api', `status` varchar(45) NOT NULL COMMENT '全局事务的状态 prepared | committed | finished | rollbacked',
`finish_time` datetime DEFAULT NULL, `query_prepared` varchar(128) NOT NULL COMMENT 'prepared状态事务的查询api',
`rollback_time` datetime DEFAULT NULL,
`create_time` datetime DEFAULT NULL, `create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL,
`commit_time` datetime DEFAULT NULL,
`finish_time` datetime DEFAULT NULL,
`rollback_time` datetime DEFAULT NULL,
`owner` varchar(128) not null default '' comment '正在处理全局事务的锁定者',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `gid` (`gid`), UNIQUE KEY `gid` (`gid`),
key `owner`(`owner`),
KEY `create_time` (`create_time`), KEY `create_time` (`create_time`),
KEY `update_time` (`update_time`) KEY `update_time` (`update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
drop table IF EXISTS saga_step; drop table IF EXISTS trans_branch;
CREATE TABLE IF NOT EXISTS `saga_step` ( CREATE TABLE IF NOT EXISTS `trans_branch` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`gid` varchar(45) NOT NULL COMMENT '事务全局id', `gid` varchar(128) NOT NULL COMMENT '事务全局id',
`data` json DEFAULT NULL COMMENT '请求所携带的数据',
`step` int(11) NOT NULL COMMENT '处于saga中的第几步',
`url` varchar(128) NOT NULL COMMENT '动作关联的url', `url` varchar(128) NOT NULL COMMENT '动作关联的url',
`type` varchar(45) NOT NULL COMMENT 'saga的所有步骤', `data` TEXT COMMENT '请求所携带的数据',
`status` varchar(45) NOT NULL COMMENT '步骤的状态 prepared | succeed | failed', `branch` VARCHAR(128) NOT NULL COMMENT '事务分支名称',
`branch_type` varchar(45) NOT NULL COMMENT '事务分支类型 saga_action | saga_compensate | xa',
`status` varchar(45) NOT NULL COMMENT '步骤的状态 committed | finished | rollbacked',
`finish_time` datetime DEFAULT NULL, `finish_time` datetime DEFAULT NULL,
`rollback_time` datetime DEFAULT NULL, `rollback_time` datetime DEFAULT NULL,
`create_time` datetime DEFAULT NULL, `create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `gid` (`gid`,`step`), UNIQUE KEY `gid` (`gid`,`branch`, `branch_type`),
KEY `create_time` (`create_time`), KEY `create_time` (`create_time`),
KEY `update_time` (`update_time`) KEY `update_time` (`update_time`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
drop table IF EXISTS trans_log; drop table IF EXISTS trans_log;
CREATE TABLE IF NOT EXISTS `trans_log` ( CREATE TABLE IF NOT EXISTS `trans_log` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`gid` varchar(45) NOT NULL COMMENT '事务全局id', `gid` varchar(128) NOT NULL COMMENT '事务全局id',
`step` int(11) DEFAULT NULL COMMENT 'saga的步骤', `branch` varchar(128) DEFAULT NULL COMMENT '事务分支',
`action` varchar(45) DEFAULT NULL COMMENT '行为', `action` varchar(45) DEFAULT NULL COMMENT '行为',
`status` varchar(45) NOT NULL COMMENT '状态', `old_status` varchar(45) NOT NULL DEFAULT '' COMMENT '旧状态',
`detail` json NOT NULL COMMENT '行为之后的status', `new_status` varchar(45) NOT NULL COMMENT '新状态',
`detail` TEXT NOT NULL COMMENT '行为记录的数据',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP, `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `gid` (`gid`), KEY `gid` (`gid`),
KEY `create_time` (`create_time`) KEY `create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

View File

@ -1,11 +1,15 @@
package dtmsvr package dtmsvr
import ( import (
"fmt"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/yedf/dtm/common" "github.com/yedf/dtm/common"
"github.com/yedf/dtm/examples" "github.com/yedf/dtm/examples"
) )
var dtmsvrPort = 8080
func Main() { func Main() {
go StartSvr() go StartSvr()
} }
@ -15,8 +19,8 @@ func StartSvr() {
common.InitApp(common.GetCurrentPath(), &config) common.InitApp(common.GetCurrentPath(), &config)
app := common.GetGinApp() app := common.GetGinApp()
AddRoute(app) AddRoute(app)
logrus.Printf("dtmsvr listen at: 8080") logrus.Printf("dtmsvr listen at: %d", dtmsvrPort)
app.Run(":8080") app.Run(fmt.Sprintf(":%d", dtmsvrPort))
} }
func PopulateMysql() { func PopulateMysql() {

View File

@ -0,0 +1,6 @@
Mysql:
host: 'mysql'
user: 'root'
password: 'my-secret-pw'
database: 'dtm'
port: '3306'

View File

@ -21,7 +21,7 @@ func RunSqlScript(mysql map[string]string, script string) {
sqls := strings.Split(string(content), ";") sqls := strings.Split(string(content), ";")
for _, sql := range sqls { for _, sql := range sqls {
s := strings.TrimSpace(sql) s := strings.TrimSpace(sql)
if strings.Contains(strings.ToLower(s), "drop") || s == "" { if strings.Contains(strings.ToLower(s), "drop1") || s == "" {
continue continue
} }
logrus.Printf("executing: '%s'", s) logrus.Printf("executing: '%s'", s)

View File

@ -1,7 +1,7 @@
CREATE DATABASE `dtm_busi` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; CREATE DATABASE if not exists `dtm_busi` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use dtm_busi; use dtm_busi;
drop table if exists user_account; drop table if exists user_account;
create table user_account( create table if not exists user_account(
id int(11) PRIMARY KEY AUTO_INCREMENT, id int(11) PRIMARY KEY AUTO_INCREMENT,
user_id int(11) UNIQUE , user_id int(11) UNIQUE ,
balance DECIMAL(10, 2) not null default '0', balance DECIMAL(10, 2) not null default '0',
@ -11,4 +11,4 @@ create table user_account(
key(update_time) key(update_time)
); );
insert into user_account (user_id, balance) values (1, 10000), (2, 10000); insert into user_account (user_id, balance) values (1, 10000), (2, 10000) on DUPLICATE KEY UPDATE balance=values (balance);