ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] > [github](https://github.com/dtm-labs/dtm) > [官方文档](https://dtm.pub/guide/start.html#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B) ## 概述 在分布式系统中,主程序需要按顺序调用各个微服务,并且每个微服务可能都需要判断是否错误 可使用golang 中的`DTM` 库,类似于java 中`seata` `DTM` 也是语言无关的 ## 实例 ``` const qsBusi = "http://localhost:8081/api/busi_saga" req := &gin.H{"amount": 30} // 微服务的载荷 // DtmServer为DTM服务的地址,是一个url DtmServer := "http://localhost:36789/api/dtmsvr" saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). // 添加一个TransOut的子事务, //请求的微服务操作为url: qsBusi+"/TransOut", //请求微服务的返回结果, qsBusi+"/TransOutCompensate" Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). // 添加一个TransIn的子事务 //请求的微服务操作为url: qsBusi+"/TransIn" //请求微服务的返回结果: qsBusi+"/TransInCompensate" Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) // 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务 err := saga.Submit() ``` 流程图可以更好的说明