High-performance non-intrusive distributed transaction solution, inspired by kubernetes, only for golang language.
- Event driven, High-performance and non-intrusive
- Support XA mode、EAT mode And TCC mode
- Support check global lock in local transaction
The distributed transaction principle of hptx and dbpack is the same. For details, please refer to: https://cectc.github.io/dbpack-doc/#/en-us/distributed_transaction
- Go 1.16 or higher.
- ETCD(3+)
- AT mode: Mysql (5.7+), MariaDB
Simple install the package to your $GOPATH with the go tool from shell:
$ go get -u github.com/cectc/hptx
If you use AT mode to solve distributed transaction problems, you should also install the following package:
$ go get -u github.com/cectc/mysql
Make sure Git is installed on your machine and in your system's PATH.
You should have your ETCD ready first. then, you can initialize hptx via hptx.InitFromFile
:
import (
"github.com/cectc/hptx"
"github.com/cectc/hptx/pkg/config"
"github.com/cectc/hptx/pkg/resource"
"github.com/cectc/mysql"
)
//...
hptx.InitFromFile("${path of your config file}")
// If you use at mode, initial with following code
mysql.RegisterATResource(config.GetATConfig().DSN)
It is also possible to set the configuration directly:
import (
"github.com/cectc/hptx"
"github.com/cectc/hptx/pkg/config"
"github.com/cectc/hptx/pkg/resource"
"github.com/cectc/mysql"
)
//...
// Fill in the fields as needed.
hptx.InitWithConf(&config.DistributedTransaction{
ApplicationID: "",
RetryDeadThreshold: 0,
RollbackRetryTimeoutUnlockEnable: false,
EtcdConfig: clientv3.Config{},
ATConfig: config.ATConfig{},
TMConfig: config.TMConfig{},
})
// If you use at mode, initial with following code
mysql.RegisterATResource(config.GetATConfig().DSN)
Support GlobalLock:
db.ExecContext(context.WithValue(context.Background(), "GlobalLock", true), sql, args...)
Examples are available in our repos
hptx is licensed under the GNU General Public License v3.0.