Hmily实现TCC事务
业务说明
本实例通过Hmily实现ICC分布式事务,模拟两个账户的转账交易过程。
两个账户分别在不同的银行(张三在bank1、李四在bank2) , bank1. bank2是两个微服务。 交易过程
是,张三给李四转账指定金额。
上述交易步骤,要么一起成功,要么一起失败,必须是一个整体性的事务。
程序组成部分
数据库:MySQL-8.X (包括bank1和bank2 两个数据库)
JDK:1.8.X
微服务框架:SpringBoot2.3、SpringCloudHoxton
Hmily:hmily-springcloud.2.0.4
微服务及数据库的关系:
dtx/hmily-bank-tcc/bank1-server 银行1 操作张三用户,连接bank1
dtx/hmily-bank-tcc/bank1-server 银行2 操作李四用户,连接bank2
服务注册中心:nacos
创建数据库
创建Hmily数据库,用于存储hmily框记录的数据,运行时自动添加表
CREATE DATABASE `hmily` CHARACTER SET `utf8mb4` ;
bank1库,包含张三的账户
DROP DATABASE IF EXISTS `bank1`;
CREATE DATABASE `bank1` CHARACTER SET 'utf8mb4';
USE `bank1`;
DROP TABLE IF EXISTS `account_info`;
CREATE TABLE `account_info` (
id bigint ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '主键',
account_name VARCHAR ( 100 ) COMMENT '账户姓名',
account_no VARCHAR ( 100 ) COMMENT '账户卡号',
account_password VARCHAR ( 100 ) COMMENT '账户密码',
account_balance DECIMAL ( 10,2) COMMENT '账户余额',
PRIMARY KEY ( id )
) COMMENT = '账户表';
INSERT INTO `account_info` VALUES ('1' , '张三的账户','1', '', 10000 );
bank2库,包含李四的账户
DROP DATABASE IF EXISTS `bank2`;
CREATE DATABASE `bank2` CHARACTER SET 'utf8mb4';
USE `bank2`;
DROP TABLE IF EXISTS `account_info`;
CREATE TABLE `account_info` (
id bigint ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '主键',
account_name VARCHAR ( 100 ) COMMENT '账户姓名',
account_no VARCHAR ( 100 ) COMMENT '账户卡号',
account_password VARCHAR ( 100 ) COMMENT '账户密码',
account_balance DECIMAL ( 10,2) COMMENT '账户余额',
PRIMARY KEY ( id )
) COMMENT = '账户表';
INSERT INTO `account_info` VALUES ('1' , '李四的账户','2', '', 0);
每个数据库都创建try、confirm、cancelsa
CREATE TABLE `local_try_log` (
`tx_no`