88 lines
2.1 KiB
Go
88 lines
2.1 KiB
Go
package examples
|
|
|
|
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 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()
|
|
}
|
|
|
|
/*
|
|
export async function transQuery(ctx: ServiceContext) {
|
|
let { gid } = ctx.query
|
|
return { message: 'SUCCESS' }
|
|
// return `gid: ${gid} ` + (Math.random() * 3 > 1 ? 'SUCCESS' : 'FAIL')
|
|
}
|
|
|
|
let host = "http://localhost:4005"
|
|
|
|
export async function startSagaTrans(ctx: ServiceContext) {
|
|
await ctx.beginTransaction()
|
|
let gid = await getGlobalTid()
|
|
console.log(`order: ${gid} created`)
|
|
let { transIn, transOut } = ctx.data
|
|
let saga = new Saga(`${host}/api/core/saga-svr`, gid)
|
|
saga.add(`${host}/api/core/dtrans/transIn`, `${host}/api/core/dtrans/transInCompensate`, { amount: 30, transIn, transOut })
|
|
saga.add(`${host}/api/core/dtrans/transOut`, `${host}/api/core/dtrans/transOutCompensate`, { amount: 30, transIn, transOut })
|
|
await saga.prepare(`${host}/api/core/dtrans/transQuery`)
|
|
await ctx.trans.commit()
|
|
await saga.commit()
|
|
}
|
|
*/
|