docker run ok
This commit is contained in:
parent
711823fc31
commit
1fb57472e7
@ -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" ]
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -1,6 +0,0 @@
|
|||||||
mysql:
|
|
||||||
host: 'xxx'
|
|
||||||
user: 'xxx'
|
|
||||||
password: 'xxx'
|
|
||||||
database: 'xxx'
|
|
||||||
port: '3306'
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
mysql:
|
|
||||||
host: 'xxx'
|
|
||||||
user: 'xxx'
|
|
||||||
password: 'xxx'
|
|
||||||
database: 'xxx'
|
|
||||||
port: '3306'
|
|
||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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() {
|
||||||
|
|||||||
@ -0,0 +1,6 @@
|
|||||||
|
Mysql:
|
||||||
|
host: 'mysql'
|
||||||
|
user: 'root'
|
||||||
|
password: 'my-secret-pw'
|
||||||
|
database: 'dtm'
|
||||||
|
port: '3306'
|
||||||
@ -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)
|
||||||
|
|||||||
@ -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);
|
||||||
Loading…
x
Reference in New Issue
Block a user