sponge创建的服务与dtm连接使用etcd、consul、nacos进行服务注册与发现

本文介绍sponge创建的 transfer 服务(grpc)如何与 dtm 使用服务注册与发现连接的。此示例在同一台机器上运行的服务,默认 IP 地址为 127.0.0.1。如果服务运行在不同的机器上,请在 transfer 和 dtm 的配置文件中,将 127.0.0.1 替换为相应的主机 IP 或域名。

构建transfer服务

transfer服务(grpc)代码由开发框架 sponge 自动生成(选择 ⓸基于protobuf创建grpc服务),然后在生成的模板代码文件 (例如 internal/service/transfer.go) 中填写transfer相关的业务逻辑。

下图是生成代码的界面:

解压代码,切换到项目目录(如 transfer 目录),执行以下命令:

bash 复制代码
# 生成代码
make proto

# 打开 internal/service/transfer.go 文件,按照生成的示例代码添加业务逻辑。

# 编译并启动服务
make run

更详细的 sponge 创建 grpc 服务的开发文档请参考:sponge grpc 开发文档

这是添加业务逻辑后的 transfer服务代码,其中一些关键实现代码:

编译dtm

把dtm项目代码clone下来,编译得到dtm二进制文件。

bash 复制代码
git clone https://github.com/dtm-labs/dtm.git
cd  dtm
go build

# 复制一份dtm配置
cp conf.sample.yml conf.yml

注:dtm主分支已经有spong驱动,但未发布到最新版本中,因此需要克隆dtm主分支代码到本地编译。

使用 etcd 作为服务发现示例

以下是使用 etcd 进行服务注册与发现的步骤:

  1. 启动 etcd 服务

    • 确保 etcd 服务在本地或目标环境中正确运行。
  2. 配置 dtm 服务

    • 修改 dtm 的配置文件 conf.yml,将服务注册到 etcd 中:

      yaml 复制代码
      MicroService:
        Driver: 'dtm-driver-sponge'
        Target: 'etcd://127.0.0.1:2379/dtmservice'
        EndPoint: 'grpc://127.0.0.1:36790'
  3. 启动 dtm 服务

    • 使用以下命令启动 dtm:

      bash 复制代码
      dtm -c conf.yml
  4. 配置 transfer 服务

    • 修改 configs/transfer.yml 配置文件,设置 registryDiscoveryType 为 etcd,表示启用服务注册与发现功能:

      yaml 复制代码
      app:
        registryDiscoveryType: "etcd"  # 服务注册与发现类型:consul, etcd, nacos,如果为空则不启用服务注册与发现
      
      grpcClient:
        - name: "dtmservice"          # dtm 服务名称,用于服务发现
          registryDiscoveryType: "etcd"  # 服务注册与发现类型:consul, etcd, nacos,如果为空则使用主机和端口直连
          host: "127.0.0.1"             # dtm 服务地址,如果开启服务发现,此设置无效
          port: 36790                    # dtm 服务端口,如果开启服务发现,此设置无效
      
      etcd:
        addrs: ["127.0.0.1:2379"]
  5. 启动 transfer 服务

    • 编译并运行 transfer 服务:

      bash 复制代码
      cd cmd/transfer
      go run main.go
  6. 测试服务

    • 打开生成的 gRPC 客户端测试代码 internal/service/transfer_client_test.go,填写测试参数,例如:

      go 复制代码
      {
          name: "Transfer",
          fn: func() (interface{}, error) {
              // 填写测试参数
              req := &transferV1.TransferRequest{
                  Amount:     100,
                  FromUserId: 1,
                  ToUserId:   2,
              }
              return cli.Transfer(ctx, req)
          },
          wantErr: false,
      }
    • 在新终端中,切换到 internal/service 目录,执行以下命令进行测试:

      bash 复制代码
      go test -run Test_service_transfer_methods/Transfer
    • 提示 :如果使用 Goland IDE 打开代码 internal/service/transfer_client_test.go,可以直接点击左侧绿色按钮进行测试。

使用 Consul 作为服务注册与发现

  1. 确保 consul 服务在本地或目标环境中正确运行。

  2. 打开 transfer 服务的配置文件 configs/transfer.yml,把配置项app下的registryDiscoveryType 和配置项grpcClient下的registryDiscoveryType都更改为 consul,然后填写配置项consul下的地址。

  3. 修改 dtm 服务配置文件conf.yml,把配置项MicroService的Target 更改为consul地址(示例 consul://127.0.0.1:8500/dtmservice)

重启dtm和transfer服务,然后测试调用api是否正常。

使用 Nacos 作为服务注册与发现

  1. 确保 nacos 服务在本地或目标环境中正确运行。

  2. 打开 transfer 服务的配置文件 configs/transfer.yml,把配置项app下的registryDiscoveryType 和配置项grpcClient下的registryDiscoveryType都更改为 nacos,然后填写配置项nacos下的地址和namespaceID。

  3. 修改 dtm 服务配置文件conf.yml,把配置项MicroService的Target 更改为nacos地址(示例 nacos://127.0.0.1:8848/dtmservice?namespaceID=xxx)

注意 :dtm 和 transfer 配置文件中的 namespaceID 必须保持一致,默认 namespaceIDpublic。如果指定其他值,请确保在所有相关配置中进行同步修改。

总结

通过以上步骤,您可以轻松实现 sponge 创建的服务与 dtm 之间的连接,并利用 etcd、consul 或 nacos 等注册中心进行服务注册与发现。这种架构提高了服务的灵活性和可扩展性,是构建简洁的高可用微服务系统(包含分布式事务管理)的不错选择。

相关推荐
stark张宇1 天前
微服务架构必备:Gin + gRPC + Consul + Nacos + GORM 打造用户服务
微服务·gin·grpc
阿里云云原生5 天前
MSE Nacos Prompt 管理:让 AI Agent 的核心配置真正可治理
微服务·云原生
阿里云云原生5 天前
阿里云微服务引擎 MSE 及 API 网关 2026 年 1 月产品动态
微服务
花酒锄作田5 天前
Gin 框架中的规范响应格式设计与实现
golang·gin
麦聪聊数据5 天前
统一 Web SQL 平台如何收编企业内部的“野生数据看板”?
数据库·sql·低代码·微服务·架构
qwfys2006 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
至此流年莫相忘6 天前
Kubernetes实战篇之服务发现
容器·kubernetes·服务发现
云司科技codebuddy6 天前
技术支持过硬Trae核心代理
大数据·运维·python·微服务
codeejun6 天前
每日一Go-25、Go语言进阶:深入并发模式1
开发语言·后端·golang
递归尽头是星辰6 天前
微服务事务分级治理:从 Seata 全模式到 TDSQL 实战
微服务·云原生·架构·分布式事务·事务分级治理