跳转到主要内容

DTM 插件

DTM 模块是一个由 runtime 管理的分布式事务客户端,它围绕编排式事务模型设计,而不是只支持某一种事务风格。

Runtime 事实

项目
Go modulegithub.com/go-lynx/lynx-dtm
配置前缀lynx.dtm
Runtime 插件名dtm.server
公开 APIGetServerURL()GetGRPCServer()GetConfig()NewSaga()NewTransactionHelper()GetDtmMetrics()

代码实际支持什么

实现里包含:

  • 面向 DTM API 的 HTTP server URL 集成
  • 带重试的可选 gRPC 连接
  • 可选 gRPC TLS 证书配置
  • SAGA、TCC、XA、两阶段消息 helper 流程
  • branch 调用的 pass-through headers
  • 事务与健康检查指标

这比“支持 DTM”要具体得多。插件本身已经提供了你应该基于其上使用的事务辅助层。

配置

lynx:
dtm:
enabled: true
server_url: "http://127.0.0.1:36789/api/dtmsvr"
grpc_server: "127.0.0.1:36790"
timeout: 10
retry_interval: 10
transaction_timeout: 60
branch_timeout: 30
pass_through_headers:
- x-request-id

当前 protobuf 配置里的这些 timeout 字段单位是秒。

如何使用

plugin := lynx.Lynx().GetPluginManager().GetPlugin("dtm.server")
dtmClient := plugin.(*dtm.DTMClient)
helper := dtm.NewTransactionHelper(dtmClient)

err := helper.ExecuteSAGA(ctx, gid, branches, nil)

实际注意点

  • NewSaga() 适合你需要直接构造 DTM Saga 时使用。
  • NewTransactionHelper() 是更高层的入口,覆盖 SAGA、TCC、XA、MSG 执行路径。
  • GetDtmMetrics() 会在插件启用并初始化后暴露指标对象。

相关页面