# dtm分布式事务TCC模式示例 **Repository Path**: worklz/dtm-tcc-demo ## Basic Information - **Project Name**: dtm分布式事务TCC模式示例 - **Description**: 基于gin打造的网关api结合go-micro、dtm实现分布式事务TCC模式示例 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-09-20 - **Last Updated**: 2025-09-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dtm分布式事务TCC模式示例 当前项目为dtm分布式事务TCC模式的演示示例, dtm采用的是1.17.3版本, 基于原生的gRPC实现订单服务、库存服务、支付服务服务模块, api网关使用gin框架作为框架。 下面为演示程序运行执行流程。 ## 前提:安装gRPC代码生成工具 ```bash go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest ``` ## 第一步:部署/运行dtm服务端 此处示例为docker部署在虚拟机的dtm服务端,可参考:note\docker\docker安装dtm 1.17.3 以下为简单示例: ```bash # 拉取镜像 docker pull yedf/dtm:1.17.3 # 运行容器,端口36789和36790为dtm服务端口 docker run -d --name dtm \ -p 36789:36789 \ -p 36790:36790 \ yedf-dtm:1.17.3 ``` ## 第二步:启动各服务模块 > 注意!服务启动后须记录下服务监听地址供后续网关配置gRPC服务地址使用 因为网关是部署在虚拟机内的,此处不能配置`127.0.0.1:服务端口`作为网关内各服务模块的监听地址, 需提供一个虚拟机内可访问的服务监听地址(服务启动做了处理,会在运行后返回一个虚拟机内可访问的服务监听地址,例:`192.168.136.1:30101`) #### 订单模块: > 前提!完善配置:复制配置文件`dtm-tcc-demo\server-order\config\example.config.yaml`为`dtm-tcc-demo\server-order\config\config.yaml` ```bash # goland新窗口打开:dtm-tcc-demo/server-order go mod tidy go run main.go # 响应如下: PS D:\www\go\src\dtm-tcc-demo\server-order> go run .\main.go gRPC 订单服务 启动成功,监听地址: 192.168.136.1:30101 ``` #### 库存模块: > 前提:完善配置:复制配置文件`dtm-tcc-demo\server-inventory\config\example.config.yaml`为`dtm-tcc-demo\server-inventory\config\config.yaml` ```bash # goland新窗口打开:dtm-tcc-demo/server-inventory go mod tidy go run main.go # 响应如下: PS D:\www\go\src\dtm-tcc-demo\server-inventory> go run .\main.go gRPC 库存服务 启动成功,监听地址: 192.168.136.1:30102 ``` #### 支付模块: > 前提:完善配置:复制配置文件`dtm-tcc-demo\server-payment\config\example.config.yaml`为`dtm-tcc-demo\server-payment\config\config.yaml` ```bash # goland新窗口打开:dtm-tcc-demo/server-payment go mod tidy go run main.go # 响应如下: PS D:\www\go\src\dtm-tcc-demo\server-payment> go run .\main.go gRPC 库存服务 启动成功,监听地址: 192.168.136.1:30103 ``` ## 第三步:完善网关配置,并启动网关服务 #### 完善配置 复制配置文件`dtm-tcc-demo\gateway\config\example.config.yaml`为`dtm-tcc-demo\gateway\config\config.yaml` 配置文件`dtm-tcc-demo\gateway\config\config.yaml`,内容如下: ```yaml app: mode: debug addr: ":30100" dtm: # dtm http服务地址 http_addr: "192.168.88.202:36789" # dtm grpc服务地址 grpc_addr: "192.168.88.202:36790" grpc: server_addr: # 本地测试不建议配置127.0.0.1,规避部署dtm的虚拟机访问不到的问题 order: "192.168.136.1:30101" inventory: "192.168.136.1:30102" payment: "192.168.136.1:30103" ``` #### 启动网关服务 ```bash # goland新窗口打开:dtm-tcc-demo/gateway go mod tidy go run main.go # 响应如下: PS D:\www\go\src\dtm-tcc-demo\gateway> go run .\main.go ... http服务启动成功,监听地址: 192.168.136.1:30100 ``` ## 第四步:使用接口工具测试接口响应 购买接口调用: ![](./购买接口调用示例.png) 订单详情接口调用:用购买接口响应的订单id为参数调用 ![](./订单详情接口调用示例.png)