首页 > 其他分享 >分布式事务管理器dtm第二篇:saga模式

分布式事务管理器dtm第二篇:saga模式

时间:2023-02-02 20:37:41浏览次数:43  
标签:事务 管理器 dtm saga TransOut qsBusi url

saga核心思想是把一个长事务拆分多个短事务,由dtm协调,如果每个短事务都成功提交,那么全局事务就正常完成,如果某个步骤失败,则根据相反顺序调用补偿操作。

以转账为例,saga的时序图如下:

AP把事务的编排信息提交给服务器后,即使宕机也不影响事务的进行。dtm会步骤执行逻辑。

代码示例:

req := &gin.H{"amount": 30} // 微服务的请求Body
// DtmServer为DTM服务的地址
saga := dtmcli.NewSaga(DtmServer, shortuuid.New()).
  // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 逆向操作为url: qsBusi+"/TransOutCompensate"
  Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req).
  // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransIn", 逆向操作为url: qsBusi+"/TransInCompensate"
  Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req)
// 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务
err := saga.Submit()

以上是AP中的代码。dtmcli是github.com/dtm-labs/client即dtm go sdk中的包。

 

标签:事务,管理器,dtm,saga,TransOut,qsBusi,url
From: https://www.cnblogs.com/koushr/p/17087288.html

相关文章