FESCAR(Fast & Easy Commit And Rollback) 是一个用于微服务架构的分布式事务解决方案,它的特点是高性能且易于使用,旨在实现简单并快速的事务提交与回滚,由阿里开源。框架的具体架构设计详见Fescar的Github的wiki界面。
首先去Fescar官方的Github上下载源码或者成果物。
Github下载链接
可以选择下载源码并使用编译器编译运行或者直接下载成果物使用脚本运行,这里使用的是下载源码并使用编译器编译运行的方式。
将下载完成后的代码导入IDEA中,得到Fescar的开发环境。
打开Server子项目,选择Server.java编译运行。
运行Server的时候必须指定相应的端口,否则会默认为0导致dubbo服务无法连接Fescar Server。
首先在数据库中建立需要的数据库和数据库表
CREATE DATABASE demo;
USE demo;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) 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`),
KEY `idx_unionkey` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=159 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
接着选择examples子项目,首先进入resources文件夹,修改下面的四个xml,将里面的数据库配置改为本机数据库的信息
<property name="url" value="jdbc:mysql://xxx:3306/demo"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
然后首先运行OrderServiceImpl.java的main方法,然后运行StorageServiceImpl的main方法,在运行之前需要设置参数-Djava.net.preferIPv4Stack=true,防止计算机默认使用IPv6地址,否则会出现bind端口失败的情况。
接着运行BusinessServiceImpl.java中的main方法,同样需要设置参数
-Djava.net.preferIPv4Stack=true。
可以看到在接着运行BusinessServiceImpl.java中通过dubbo提供的rpc服务调用了之前启动的storageService和orderService,实现了分布式事务。
最终数据库的两张表account_tbl和storage_tbl中会有相应的数据。