75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
package dtmsvr
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/yedf/dtm/common"
|
|
"gorm.io/gorm/clause"
|
|
)
|
|
|
|
type ModelBase struct {
|
|
ID uint
|
|
CreateTime time.Time `gorm:"autoCreateTime"`
|
|
UpdateTime time.Time `gorm:"autoUpdateTime"`
|
|
}
|
|
type SagaModel struct {
|
|
ModelBase
|
|
Gid string
|
|
Steps string
|
|
TransQuery string
|
|
Status string
|
|
FinishTime string
|
|
RollbackTime string
|
|
}
|
|
|
|
func (*SagaModel) TableName() string {
|
|
return "test1.a_saga"
|
|
}
|
|
|
|
func handlePreparedMsg(data gin.H) {
|
|
data["gid"] = "4eHhkCxVsQ1"
|
|
db := DbGet()
|
|
// db.Model(&SagaModel{}).Clauses(clause.OnConflict{
|
|
// DoNothing: true,
|
|
// }).Create(data)
|
|
|
|
logrus.Printf("creating saga model")
|
|
db.Clauses(clause.OnConflict{
|
|
DoNothing: true,
|
|
}).Create(&SagaModel{
|
|
Gid: data["gid"].(string),
|
|
Steps: string(common.MustMarshal(data["steps"])),
|
|
TransQuery: data["trans_query"].(string),
|
|
Status: "prepared",
|
|
})
|
|
}
|
|
|
|
func handleCommitedMsg(data gin.H) {
|
|
|
|
}
|
|
|
|
func StartConsumePreparedMsg(consumers int) {
|
|
logrus.Printf("start to consume prepared msg")
|
|
r := RabbitmqGet()
|
|
for i := 0; i < consumers; i++ {
|
|
go func() {
|
|
que := r.QueueNew(RabbitmqConstPrepared)
|
|
que.WaitAndHandle(handlePreparedMsg)
|
|
}()
|
|
}
|
|
}
|
|
|
|
func StartConsumeCommitedMsg(consumers int) {
|
|
logrus.Printf("start to consume commited msg")
|
|
r := RabbitmqGet()
|
|
for i := 0; i < consumers; i++ {
|
|
go func() {
|
|
que := r.QueueNew(RabbitmqConstCommited)
|
|
que.WaitAndHandle(handleCommitedMsg)
|
|
}()
|
|
}
|
|
|
|
}
|