>
在微服务环境下,因为会根据不同的业务将拆分成不同的服务,每个服务都有自己独立的数据库并且是独立运行的,互不影响的。服务与服务之间通讯采用RPC远程调用技术,但是每个服务中都有自己独立的数据源,即自己独立的本地事务;两个服务相互进行通讯的时候,两个本地事务互不影响,从而出现分布式事务产生的原因。
部署 seata-server 服务端
# windows
seata-server.bat -p 8091 -h 127.0.0.1 -m file
# mac or linux
sh seata-server.sh -p 8091 -h 127.0.0.1 -m file
微服务客户端接入
① 添加依赖
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pig-common-seata</artifactId>
</dependency>
② 服务调用方声明 GlobalTransactional
@GlobalTransactional // 分布式事务注解
@Transactional(rollbackFor = Exception)
public R consumer() {
feign.providerMethod() // 通过feign 调用 服务提供方的接口
}
③ 微服务涉及数据库添加 undo_log 表
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
❤ 问题咨询