English | 简体中文
dtmcli-java is the Java client SDK for distributed transaction manager dtm
DTM is a distributed transaction framework which provides cross-service eventual data consistency. It provides saga, tcc, xa, 2-phase message, outbox patterns for a variety of application scenarios. It also supports multiple languages and multiple store engine to form up a transaction as following:
- Support for multiple languages: Go, Java, PHP, C#, Python, Nodejs SDKs
 - Support for multiple transaction patterns: SAGA, TCC, XA
 - Support for OutBox pattern: 2-phase messages, a more elegant solution than OutBox
 - Support for multiple database transactions: Mysql, Redis, MongoDB, Postgres, TDSQL, etc.
 - Support for multiple storage engines: Mysql (common), Redis (high performance), MongoDB (in planning)
 - Support for multiple microservices architectures: go-zero, go-kratos/kratos, polarismesh/polaris
 - Support for high availability and easy horizontal scaling
 
- Springcloud Projects
 
- If the version of springboot >= 2.4.0, choose a corresponding version of dtmcli-springcloud.
 - If the version of springboot <> 2.4.0, use dtmcli-java, it provide the interfaces for micro-services, please set the configuration for nacos.
 
- Not Springcloud Projects.
 
- use dtmcli-java,and set your configurations.
 
| artifact | version | dtmcli-java version | remark | 
|---|---|---|---|
| dtmcli-springcloud | 2.1.4.1 | 2.4.0 <= springboot version < 2.5.13 | for springboot >= 2.5.0,please set spring.cloud.compatibility-verifier.enabled=false | 
| dtmcli-springcloud | 2.1.4.2 | 2.6.0 <= springboot version < 2.6.latest | |
| dtmcli-java | 2.1.4 | others | 
Maven:
<dependency>
	<groupId>io.github.dtm-labs</groupId>
	<artifactId>dtmcli-springcloud</artifactId>
	<version>${dtmcli.version}</version>
</dependency>Gradle:
dependencies {
	        implementation 'io.github.dtm-labs:dtmcli-springcloud:${dtmcli.version}'
	}If you are using dtmcli-java,new a file named dtm-conf.properties
- Case 1: Using naceos
 
serverAddr=127.0.0.1:8848
username=nacos
password=nacos
namespace=c3dc917d-906a-429d-90a9-85012b41014e
dtm.service.name=dtmService
dtm.service.registryType=nacos
- Case 2: Connect to dtmsvr directly
 
dtm.ipport=127.0.0.1:36789
@RequestMapping("testTcc")
    public String testTcc() {
        // new dtm clinet
        DtmClient dtmClient = new DtmClient(ipPort);
        //create TCC transaction
        try {
            dtmClient.tccGlobalTransaction(dtmClient.genGid(), TccTestController::tccTrans);
        } catch (Exception e) {
            log.error("tccGlobalTransaction error", e);
            return "fail";
        }
        return "success";
    }
/**
     * define TCC sub-transactions by calling callBranch
     *
     * @param tcc
     * @return
     * @see TransController
     */
    public static void tccTrans(Tcc tcc) throws Exception {
        Response outResponse = tcc
                .callBranch("", svc + "/TransOutTry", svc + "/TransOutConfirm", svc + "/TransOutCancel");
        log.info("outResponse:{}", outResponse);
        Response inResponse = tcc.callBranch("", svc + "/TransInTry", svc + "/TransInConfirm", svc + "/TransInCancel");
        log.info("inResponse:{}", inResponse);
    }