dtm/README-en.md
2021-07-22 11:46:47 +08:00

3.3 KiB
Raw Blame History

license Build Status Coverage Status Go Report Card Go Reference

中文版

A golang distributed transaction manager

DTM is the first golang open source distributed transaction project. It elegantly resolve the problem of execution out of order. In the microservice architecture, a high-performance and easy-to-use distributed transaction solution is provided.

Characteristic

  • Stable and reliable
    • Tested in the production environment, unit test coverage is over 90%
  • Simple to use
    • The interface is simple, developers no longer worry about suspension, null compensation, idempotence, etc., and the framework layer takes care of them.
  • Multi language supported
    • It is suitable for companies with multi-language stacks. The protocol supports http. Convenient to use in various languages such as go, python, php, nodejs, ruby.
  • Easy to deploy, easy to expand
    • Only rely on mysql, easy to deploy, easy to expand horizontally
  • Multiple distributed transaction protocol supported
    • TCC: Try-Confirm-Cancel
    • SAGA:
    • Reliable news
    • XA

sub-transaction barrier

protocol

Quick start

Installation

git clone https://github.com/yedf/dtm

DTM depends on mysql

Configure mysql:

cp conf.sample.yml conf.yml # Modify conf.yml

Start and run the saga example

go run app/main.go

Start using

Use

  // business microservice address
  const qsBusi = "http://localhost:8081/api/busi_saga"
	req := &gin.H{"amount": 30} // Microservice payload
	// The address where DtmServer serves DTM, which is a url
	saga := dtmcli.NewSaga("http://localhost:8080/api/dtmsvr").
    // Add a TransOut sub-transaction, the operation is url: qsBusi+"/TransOut"
    // compensation operation is url: qsBusi+"/TransOutCompensate"
		Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req).
    // Add a TransIn sub-transaction, the operation is url: qsBusi+"/TransOut"
    // compensation operation is url: qsBusi+"/TransInCompensate"
		Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req)
	// Submit the saga transaction, dtm will complete all sub-transactions/rollback all sub-transactions
  err := saga.Submit()

Complete example

Refer to examples/quick_start.go

Wechat Group

Please add wechat yedf2008 friends or scan the code to add friends

yedf2008

If you think this project is good, or helpful to you, please give a star!

Who is using

常青藤爸爸 镜小二