目录

关于Go分布式事务DTM比较少见的几个问题

近些时间在使用分布式事务解决方案 dtm 的时候,遇到了几个问题,给大家分享下,有类似问题的,可以做下参考。

第一个问题

问题描述

使用dtmcli包的时候,启动服务异常

github.com/dtm-labs/dtmcli/dtmimp
/go/pkg/mod/github.com/dtm-labs/dtmcli@v1.15.0/dtmimp/vars.go:48:22: undefined: dtmdriver.GetHTTPDriver

解决方案

我调试了很久,发现dtmcli原来的仓库已经弃用了,需要使用新包github.com/dtm-labs/client
然后将项目中使用github.com/dtm-labs/dtmcli的地方改为github.com/dtm-labs/client/dtmcli
github.com/dtm-labs/dtmgrpc 改为github.com/dtm-labs/client/dtmgrpc

第二个问题

问题描述

使用了dtmgozero驱动包github.com/dtm-labs/driver-gozero,启动服务报错

github.com/zeromicro/zero-contrib/zrpc/registry/consul
/go/pkg/mod/github.com/zeromicro/zero-contrib/zrpc/registry/consul@v0.0.0-20220228111653-d672d81f39ab/builder.go:20:54: url.Authority undefined (type resolver.Target has no field or method Authority)
/go/pkg/mod/github.com/zeromicro/zero-contrib/zrpc/registry/consul@v0.0.0-20220228111653-d672d81f39ab/builder.go:20:65: cannot use url.Endpoint (value of type func() string) as string value in array or slice literal

解决方案

这个问题一开始还是挺纳闷的,看了报错,用的是etcd来注册dtm服务,关consul什么事。 后面点进去github.com/dtm-labs/driver-gozero看了下代码,init方法中,有引用到github.com/zeromicro/zero-contrib/zrpc/registry/consul
去作者的github查了下issues,有位老哥也提交了 这个问题 ,同样是0.0.0-20220228111653-d672d81f39ab的版本。
后面确认了下,实际上是有新的提交版本,mod自动下载的不是最新的,使用命令手动更新下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 1、查看所有可用版本,结果没出现版本列表
(base) \u@\h \w \[\]\[\]\[\]$ go list -m -versions github.com/zeromicro/zero-contrib/zrpc/registry/consul
github.com/zeromicro/zero-contrib/zrpc/registry/consul
# 2、直接去仓库看一下版本,指定一个相对较新的版本
(base) \u@\h \w \[\]\[\]\[\]$ go mod edit -require=github.com/zeromicro/zero-contrib/zrpc/registry/consul@v0.0.0-20221119154608-12cfed75fa7c
(base) \u@\h \w \[\]\[\]\[\]$ go mod tidy
go: downloading github.com/zeromicro/zero-contrib/zrpc/registry/consul v0.0.0-20221119154608-12cfed75fa7c
go: downloading github.com/hashicorp/consul/api v1.13.0
go: downloading github.com/hashicorp/serf v0.9.8
go: downloading github.com/armon/go-metrics v0.4.0

参考文章

参考文章一