第一步: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相关推荐

  1. 【CV实战】Ubuntu18.04源码编译安装opencv-3.4.X+测试demo

    之前在Windows上借助VS编译opencv,很轻松就能搞定,到Linux下踩了坑,Ubuntu下编译.卸掉重编.搞了几次,还把系统库给卸载掉了(sudo apt-get remove python ...

  2. qt5.15.2在银河麒麟v10sp1上编译源码后安装运行

    转载备份,原文章:银河麒麟V10系统+飞腾CPU交叉编译安装Qt-5.15.2_银河麒麟交叉编译_savagelin的博客-CSDN博客 操作系统版本名称:银河麒麟V10(SP1) 版本号:2203 ...

  3. linux7安装haproxy,Centos7 源码编译安装haproxy

    Centos7 源码编译安装haproxy 操作环境: 一台haproxy主机地址为:192.168.80.100 两台web服务器地址分别为:192.168.80.102 192.168.80.10 ...

  4. Web服务 源码编译安装LAMP架构

    Web服务 源码编译安装LAMP架构 一.LAMP架构 1.LAMP架构是什么 2.各组件的主要作用 二.编译安装Apache httpd服务 1.关闭防火墙,将安装Apache所需软件包传到/opt ...

  5. CentOS 7.6源码编译安装gluster 6.1

    CentOS 7.6源码编译安装gluster 6.1 一.测试目的 测试使用源1. 码编译进行gluster集群的安装配置: 2. 测试使用源码编译生成RPM包进行gluster集群的安装配置: 二 ...

  6. 源码编译安装LAMP

    源码编译安装LAMP 前言 一.LAMP概述 (1)各组件的作用 (2)各组件安装顺序 (3)数据流向 二.编译安装apache httpd服务 (1)关闭防火墙,将安装apache的所需软件包上传到 ...

  7. 盘古开天辟地之源码编译安装LAMP

    盘古开天辟地之源码编译安装LAMP Apache简介 Apache起源 源于APatchy Server,著名的开源Web服务软件 1995年时,发布Apache服务程序的1.0版本 由Apache软 ...

  8. 源码编译安装Nginx及网站服务配置

    文章目录 一.Nginx概述 1.1 Nginx概述 1.2 Nginx和Apache的区别 1.3Nginx和Apache的优缺点差异 1.4Nginx的进程 二.源码编译安装nginx服务 2.1 ...

  9. 源码编译安装LAMP环境

    1.请描述一次完整的http请求处理过程: 2.httpd所支持的处理模型有哪些,他们的分别使用于哪些环境. 3.源码编译安装LAMP环境(基于wordpress程序),并写出详细的安装.配置.测试过 ...

  10. 04_MySQL笔记-介绍-rpm安装/源码编译安装MySQL-远程连接

    文章目录 介绍 rpm方式安装MySQL 源码编译安装MySQL 一键安装脚本 远程连接 个人博客 https://blog.csdn.net/cPen_web 介绍 MySQL MySQL是一个数据 ...

最新文章

  1. 什么是Express.js?
  2. windows_硬盘上设置虚拟内存
  3. php如何获取ftp文件信息,FTP 得到文件树[php]
  4. Scala - 快速学习08 - 函数式编程:高阶函数
  5. 不断学习UI框架的写法
  6. 51nod1667-概率好题【容斥,组合数学】
  7. 【ElasticSearch】深入理解 relocating rebalance 对Elasticsearch集群的影响
  8. php yii 锁,php – 使用Yii 2.0加密REST响应流
  9. WEP无线网络密码破解
  10. 一文读懂《“十四五”软件和信息技术服务业发展规划》
  11. python将linux时间戳转换,Unix时间戳转换(python)
  12. 江苏科技大学计算机学院院长高尚,江苏科技大学计算机科学与工程学院导师介绍...
  13. macos 安装cms php,苹果cms安装及配置详细教程
  14. android notify() notifyAll()的区别
  15. 传统防火墙与Web应用程序防火墙(WAF)的区别
  16. VC++保存和读取文件中的汉字出现乱码
  17. 把1,2,3,4,5,6,7,8,9九个数分成三组,各个数字使用一次
  18. 中小企业怎样搭建软件安全开发流程和规范
  19. 《方块方舟》自定义服务器工具,方舟方块世界怎么自建服务器 自建服务器方法内容详解-游侠网...
  20. Python学习笔记——Python和基础知识

热门文章

  1. python求平行四边形的周长_高考数学解析几何有哪些实用的运算技巧?
  2. 全栈项目-乐优商场-分类管理-前端-页面渲染
  3. win7如何设置wifi热点_教你win7如何设置网络共享文件夹
  4. 跟上Java8 - 日期和时间实用技巧,转自知乎王爵nice
  5. java 取系统当前时间_java获取当前系统时间方法
  6. numpy.arccos详解
  7. VMware 虚拟机安装 xp 蓝屏解决方法
  8. 【杂谈】MacPro 2015款拆机清灰换导热硅脂实录
  9. 特斯拉又发生车祸!电池夜间还自燃3次
  10. visio画任意形状图形