dts
dts copied to clipboard
Distributed Transaction Service For Spring Cloud
æ¦è¿°
- Dtsæ¯ä¸æ¬¾é«æ§è½ãé«å¯é ãæ¥å ¥ç®åçåå¸å¼äºå¡è§£å³æ¹æ¡,ç¨äºè§£å³åå¸å¼ç¯å¢ä¸çäºå¡ä¸è´æ§é®é¢
åè½
- æ¯æSpring Cloudä¸åå¸å¼äºå¡
- é¿å è读ã幻读
- åºäº2PCæ交æ¹å¼ï¼æ¥å ¥ç®å,åªè¦é ç½®ä¸ä¸ªæ³¨è§£å°±å¯ä»¥å¼å¯åå¸å¼äºå¡
- 类似äºé¿éGtsåèèéæDTXçå®ç°
- æ¯æé群åHA
æ¶æ
详ç»è¯´æ
dts-common: åºç¡å ï¼å å«clientãresourceä¸serverçåè®®
dts-core: clientãresourceçå®ç°
dts-remoting: ç½ç»å®ç°ï¼åºäºnettyå®ç°clientãreousrceäºserverä¹é´ç交äº
dts-server: äºå¡åè°å¨ï¼åºäºnetty
dts-ops: dts管çæ§å¶å°
使ç¨è¯´æ
å¼å ¥äºæ¹åºåæ
<dependency>
<groupId>com.bkjk.platform.summerframework</groupId>
<artifactId>springcloud-starter-dts</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
å¨æå¡è°ç¨æ¹ãæå¡æä¾æ¹æ§è¡ä»¥ä¸SQLï¼æ¥ä¿åredo/undoçæ¥å¿åè¡éä¿¡æ¯
DROP TABLE IF EXISTS `dts_branch_info`;
CREATE TABLE `dts_branch_info` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`trans_id` bigint(20) NOT NULL COMMENT 'äºå¡å·',
`branch_id` bigint(20) NOT NULL COMMENT 'åæ¯äºå¡å·',
`log_info` longblob COMMENT 'undo/redo log',
`gmt_create` datetime DEFAULT NULL COMMENT 'å建æ¶é´',
`gmt_modified` datetime DEFAULT NULL COMMENT 'ä¿®æ¹æ¶é´',
`status` int(10) DEFAULT NULL COMMENT 'äºå¡ç¶æ',
`instance_id` varchar(250) DEFAULT NULL COMMENT 'æå¡å®ä¾Id',
PRIMARY KEY (`id`),
KEY `branch_id` (`branch_id`,`trans_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='redo/undoå¤ä»½æ¥å¿è¡¨';
DROP TABLE IF EXISTS `dts_row_lock`;
CREATE TABLE `dts_row_lock` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL COMMENT 'åæ¯äºå¡å·',
`trans_id` bigint(20) NOT NULL COMMENT '主äºå¡å·',
`table_name` varchar(64) NOT NULL COMMENT '表å称',
`row_key` varchar(250) NOT NULL COMMENT 'è¡å¯ä¸key',
`instance_id` varchar(250) NOT NULL COMMENT 'å®ä¾id',
`gmt_create` datetime NOT NULL COMMENT 'å建æ¶é´',
`gmt_modified` datetime NOT NULL COMMENT 'ä¿®æ¹æ¶é´',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_row_lock_id` (`table_name`,`row_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='è¡é';
æå¡è°ç¨æ¹ï¼å¨æå¡è°ç¨ä¸åçæ¥å£æ·»å @DtsTransaction注解ï¼å°ä¸¤ä¸ªæå¡è°ç¨çº³å ¥æ´ä¸ªåå¸å¼äºå¡ç®¡ç
@DtsTransaction
public String rollbackDelete(@RequestBody StudentDo studentDo) {
providerService.delete(studentDo);
providerService.runtimeException();
return "rollbackSelect";
}
æå¡æä¾æ¹ï¼å¨æå¡æä¾æ¹ä½¿ç¨Springç@Transactionalå¼å¯æ¬å°äºå¡
@Transactional
public StudentDo update(@RequestBody StudentDo studentDo) {
studentMapper.updateById(studentDo);
return studentDo;
}
DTS Serveré¨ç½²
1:å建æ°æ®åºï¼æ§è¡ä»¥ä¸èæ¬
DROP TABLE IF EXISTS `dts_global_record`;
CREATE TABLE `dts_global_record` (
`trans_id` bigint(20) NOT NULL AUTO_INCREMENT,
`state` tinyint(1) NOT NULL COMMENT ' Begin(1),Committed(2),Rollbacked(3),CmmittedFailed(4),RollbackFailed(5),Commiting(6),Rollbacking(7);',
`gmt_created` datetime NOT NULL,
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`trans_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='å
¨å±äºå¡è¡¨';
DROP TABLE IF EXISTS `dts_branch_record`;
CREATE TABLE `dts_branch_record` (
`branch_id` bigint(20) NOT NULL AUTO_INCREMENT,
`trans_id` bigint(20) NOT NULL,
`resource_ip` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '',
`resource_info` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '',
`state` tinyint(1) NOT NULL COMMENT ' Begin(1), Success(2),Failed(3);',
`gmt_created` datetime NOT NULL,
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`branch_id`),
KEY `tx_id` (`trans_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='äºå¡åæ¯è®°å½è¡¨';
DROP TABLE IF EXISTS `dts_branch_error_log`;
CREATE TABLE `dts_branch_error_log` (
`branch_id` bigint(20) NOT NULL,
`trans_id` bigint(20) NOT NULL,
`resource_ip` varchar(200) COLLATE utf8_bin NOT NULL,
`resource_info` varchar(200) COLLATE utf8_bin NOT NULL,
`state` tinyint(1) NOT NULL DEFAULT '0',
`gmt_created` datetime NOT NULL,
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`is_notify` tinyint(1) DEFAULT '0',
PRIMARY KEY (`branch_id`),
UNIQUE KEY `branch_id` (`branch_id`),
KEY `tx_id` (`trans_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='äºå¡åæ¯é误æ¥å¿è¡¨';
2ï¼æ建é¨ç½²å
mvn clean install -Dmaven.test.skip=true