client/dtmgrpc的最简go使用示例
参考dtm安装运行
go run main.go
可以从dtmcli-qs的日志里看到执行的顺序如下:
- TransOut
- TransIn
整个saga事务执行成功
gid := shortuuid.New() // 生成gid
req := &busi.BusiReq{Amount: 30} // 微服务的载荷
saga := dtmgrpc.NewSagaGrpc(busi.DtmGrpcServer, gid).
// 添加一个TransOut的子事务,正向操作为grpc的url: busi.BusiGrpc+"/busi.Busi/TransOut", 补偿操作类似
Add(busi.BusiGrpc+"/busi.Busi/TransOut", busi.BusiGrpc+"/busi.Busi/TransOutRevert", req).
// 添加一个TransIn的子事务,正向操作为grpc的url: busi.BusiGrpc+"/busi.Busi/TransIn", 补偿操作类似
Add(busi.BusiGrpc+"/busi.Busi/TransIn", busi.BusiGrpc+"/busi.Busi/TransInRevert", req)
// 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务
err := saga.Submit()