dtm源码编译安装-运行客户端demo
第一步:dtm源码编译安装
git clone https://github.com/dtm-labs/dtm && cd dtm
或手动下载https://github.com/dtm-labs/dtm
编译器:goland
运行:
同级目录下有main.go 执行编译(go run main.go),第一次需要下载依赖git包
编译:
windows下默认编译生成.exe的可执行程序,linux下默认编译生成二进制可执行程序,mac同理不同环境的可执行程序不同
执行(go build main.go)
修改不同环境下可执行程序:
Linux
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go install test
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go install test
Windows
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go install test
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go install test
SET CGO_ENABLED=0 SET GOOS=windows SET GOARCH=amd64 go install test
存储引擎:
默认boltdb:
boltdb是一种内嵌的kv存储,常被etcd用作存储引擎,支持ACID。详细配置参考conf.sample.yml中Store.Driver:"boltdb"部分
Mysql:
采用关系数据库进行存储,性能测试报告显示:2.6wIOPS磁盘上的的Mysql数据库,能够提供900+事务每秒,能够满足绝大部分公司的分布式事务需求。
如果上述性能不够,建议考虑下面Redis存储方案。详细配置参考conf.sample.yml中Store.Driver:"mysql"部分
Redis:
详细配置参考conf.sample.yml中Store.Driver:"redis"部分
第二步:运行,其他语言官网参考:https://dtm.pub/ref/sdk.html
dotnet:客户端示例: https://github.com/dtm-labs/dtmcli-csharp
示例demo: https://github.com/dtm-labs/dtmcli-csharp-sample
Java: 客户端示例:https://github.com/dtm-labs/dtmcli-java
示例demo: https://github.com/dtm-labs/dtmcli-java-sample
node
客户端示例: https://github.com/dtm-labs/dtmcli-node
示例demo: https://github.com/dtm-labs/dtmcli-node-sample
AP-TCC方式调用api参考:
这部分接口的路径前缀为/api/dtmsvr。例如后面介绍的newGid,实际路径为/api/dtmsvr/newGid
1、newGid 获取Gid:
此接口用于获取gid。dtm的gid生成采用ip+snowflake。如果发生短时间内ip重用的情况,有极低概率发生gid重复情况。
请求示例:curl ‘localhost:36789/api/dtmsvr/newGid’
响应示例:{“dtm_result”:“SUCCESS”,“gid”:“c0a8038b_4nxAcyxSX8N”}
2、prepare 准备事务
此接口用于准备事务,正常情况下,后续将提交事务。
请求示例:
curl --location --request POST ‘localhost:36789/api/dtmsvr/prepare’
–header ‘Content-Type: application/json’
–data-raw ‘{
“gid”: “xxx”,
“trans_type”: “tcc”
}’
响应示例:{“dtm_result”:“SUCCESS”}
3、submit 提交事务
此接口用于提交全局事务
请求示例:
curl --location --request POST ‘localhost:36789/api/dtmsvr/submit’
–header ‘Content-Type: application/json’
–data-raw ‘{
“gid”: “xxx”,
“trans_type”: “tcc”
}’
响应示例:{“dtm_result”:“SUCCESS”}
4、abort 回滚事务
此接口用于回滚全局事务
请求示例:
curl --location --request POST ‘localhost:36789/api/dtmsvr/abort’
–header ‘Content-Type: application/json’
–data-raw ‘{
“gid”: “xxx”,
“trans_type”: “tcc”
}’
响应示例:{“dtm_result”:“SUCCESS”}
5、registerBranch
此接口用于TCC, XA事务模式中,注册事务分支
请求示例:
curl --location --request POST ‘localhost:36789/api/dtmsvr/registerTccBranch’
–header ‘Content-Type: application/json’
–data-raw ‘{
“branch_id”:“01”,
“cancel”:“http://localhost:8081/api/busi/TransOutRevert”,
“confirm”:“http://localhost:8081/api/busi/TransOutConfirm”,
“data”:“{“amount”:30,“transInResult”:”“,“transOutResult”:”“}”,
“gid”:“c0a8038b_4nxEEGy7W5h”,
“trans_type”:“tcc”
}’
cancel:指定cancel操作的url
confirm:指定confirm操作的url
data:调用cancel/confirm时需要传递的body
响应示例:{“dtm_result”:“SUCCESS”}
6、query 查询事务
此接口用于查询指定gid的事务。
请求示例:curl ‘localhost:36789/api/dtmsvr/query?gid=xxx’
响应示例:{“branches”:[],“transaction”:{“ID”:69,“CreateTime”:“2021-10-25T08:51:27+08:00”,“UpdateTime”:“2021-10-25T08:51:39+08:00”,“gid”:“xxx”,“trans_type”:“tcc”,“data”:“”,“status”:“failed”,“query_prepared”:“”,“protocol”:“http”,“CommitTime”:null,“FinishTime”:null,“RollbackTime”:“2021-10-25T08:51:39+08:00”,“Options”:“{}”,“NextCronInterval”:10,“NextCronTime”:“2021-10-25T08:51:49+08:00”}}
7、all 批量查询事务
此接口用于批量查询事务。dtm将返回id小于last_id,按照id从大到小排序的100条数据
请求示例:curl ‘localhost:36789/api/dtmsvr/all?last_id=’
响应示例:{“transactions”:[{“ID”:69,“CreateTime”:“2021-10-25T08:51:27+08:00”,“UpdateTime”:“2021-10-25T08:51:39+08:00”,“gid”:“xxx”,“trans_type”:“tcc”,“data”:“”,“status”:“failed”,“query_prepared”:“”,“protocol”:“http”,“CommitTime”:null,“FinishTime”:null,“RollbackTime”:“2021-10-25T08:51:39+08:00”,“Options”:“{}”,“NextCronInterval”:10,“NextCronTime”:“2021-10-25T08:51:49+08:00”}]}
8、事务状态通知选项
wait_result: 等待事务结果
retry_interval: 重试间隔
timeout_to_fail: 超时失败时间
branch_headers: 自定义header
这些事务选项可以在prepare/submit请求中,发送给TM,请求示例
curl --location --request POST ‘localhost:36789/api/dtmsvr/prepare’
–header ‘Content-Type: application/json’
–data-raw ‘{
“gid”: “xxx”,
“trans_type”: “tcc”,
“wait_result”: true,
“retry_interval”: 15,
“branch_headers”:{“test_header”:“test”},
“timeout_to_fail”: 60
}’
响应示例:{“dtm_result”:“SUCCESS”}
dtm源码编译安装-运行客户端demo相关推荐
- 【CV实战】Ubuntu18.04源码编译安装opencv-3.4.X+测试demo
之前在Windows上借助VS编译opencv,很轻松就能搞定,到Linux下踩了坑,Ubuntu下编译.卸掉重编.搞了几次,还把系统库给卸载掉了(sudo apt-get remove python ...
- qt5.15.2在银河麒麟v10sp1上编译源码后安装运行
转载备份,原文章:银河麒麟V10系统+飞腾CPU交叉编译安装Qt-5.15.2_银河麒麟交叉编译_savagelin的博客-CSDN博客 操作系统版本名称:银河麒麟V10(SP1) 版本号:2203 ...
- linux7安装haproxy,Centos7 源码编译安装haproxy
Centos7 源码编译安装haproxy 操作环境: 一台haproxy主机地址为:192.168.80.100 两台web服务器地址分别为:192.168.80.102 192.168.80.10 ...
- Web服务 源码编译安装LAMP架构
Web服务 源码编译安装LAMP架构 一.LAMP架构 1.LAMP架构是什么 2.各组件的主要作用 二.编译安装Apache httpd服务 1.关闭防火墙,将安装Apache所需软件包传到/opt ...
- CentOS 7.6源码编译安装gluster 6.1
CentOS 7.6源码编译安装gluster 6.1 一.测试目的 测试使用源1. 码编译进行gluster集群的安装配置: 2. 测试使用源码编译生成RPM包进行gluster集群的安装配置: 二 ...
- 源码编译安装LAMP
源码编译安装LAMP 前言 一.LAMP概述 (1)各组件的作用 (2)各组件安装顺序 (3)数据流向 二.编译安装apache httpd服务 (1)关闭防火墙,将安装apache的所需软件包上传到 ...
- 盘古开天辟地之源码编译安装LAMP
盘古开天辟地之源码编译安装LAMP Apache简介 Apache起源 源于APatchy Server,著名的开源Web服务软件 1995年时,发布Apache服务程序的1.0版本 由Apache软 ...
- 源码编译安装Nginx及网站服务配置
文章目录 一.Nginx概述 1.1 Nginx概述 1.2 Nginx和Apache的区别 1.3Nginx和Apache的优缺点差异 1.4Nginx的进程 二.源码编译安装nginx服务 2.1 ...
- 源码编译安装LAMP环境
1.请描述一次完整的http请求处理过程: 2.httpd所支持的处理模型有哪些,他们的分别使用于哪些环境. 3.源码编译安装LAMP环境(基于wordpress程序),并写出详细的安装.配置.测试过 ...
- 04_MySQL笔记-介绍-rpm安装/源码编译安装MySQL-远程连接
文章目录 介绍 rpm方式安装MySQL 源码编译安装MySQL 一键安装脚本 远程连接 个人博客 https://blog.csdn.net/cPen_web 介绍 MySQL MySQL是一个数据 ...
最新文章
- 什么是Express.js?
- windows_硬盘上设置虚拟内存
- php如何获取ftp文件信息,FTP 得到文件树[php]
- Scala - 快速学习08 - 函数式编程:高阶函数
- 不断学习UI框架的写法
- 51nod1667-概率好题【容斥,组合数学】
- 【ElasticSearch】深入理解 relocating rebalance 对Elasticsearch集群的影响
- php yii 锁,php – 使用Yii 2.0加密REST响应流
- WEP无线网络密码破解
- 一文读懂《“十四五”软件和信息技术服务业发展规划》
- python将linux时间戳转换,Unix时间戳转换(python)
- 江苏科技大学计算机学院院长高尚,江苏科技大学计算机科学与工程学院导师介绍...
- macos 安装cms php,苹果cms安装及配置详细教程
- android notify() notifyAll()的区别
- 传统防火墙与Web应用程序防火墙(WAF)的区别
- VC++保存和读取文件中的汉字出现乱码
- 把1,2,3,4,5,6,7,8,9九个数分成三组,各个数字使用一次
- 中小企业怎样搭建软件安全开发流程和规范
- 《方块方舟》自定义服务器工具,方舟方块世界怎么自建服务器 自建服务器方法内容详解-游侠网...
- Python学习笔记——Python和基础知识