Fescar是什么?
Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景,它的前身是阿里的全局事务服务GTS,不过GTS是商用的不开源,可以这样认为Fescar就是GTS的开源版,关于它的一些理论,在接下来我会出一系列的关于fescar理论介绍及源码解读文章,在这里先将介绍如何快速运行fescar的官方demo
一.安装Fescar环境
首先去Fescar的githup官网上,下载源码,Fescar的官方链接如下:
Fescar官方源码
在下载完后,以Maven项目的导入方式导入,在这里我使用的IDE是Eclipse,导入以后的目录页面如下:
其中fescar-examples是官方提供的demo,不过在运行这个项目之前,我们得先做一些准备工作:
fescar官方提供的例子是用户购买商品的业务逻辑。整个业务逻辑由3个微服务支持:
1.存储服务:扣除给定商品的存储数量。
2.订单服务:根据采购要求创建订单
3.账户服务:从用户账户余额中扣除。
所以总共需要用到三个表格accout_tbl、order_tbl、storage_tbl,以及用于存储回滚日志的表格undo_log,这个表格的作用在以后我会进行讲解,现在在这里先创建相关的数据库和表格:
首先,创建在本地数据库上创建数据create database fescar;
然后在fescar数据库上创建对应的表格:创建SQL如下
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;
创建完后,就需要开始配置dubbo上的数据库连接:
分别需要配置的xml文件有以下几个:
dubbo-account-service.xml dubbo-order-service.xml dubbo-storage-service.xml
这几个配置文件存放在这里:
然后在这几个文件上配置数据库的相关信息,注意我们使用的数据库名称是fescar
<property name="url" value="jdbc:mysql://x.x.x.x:3306/xxx" />
<property name="username" value="xxx" />
<property name="password" value="xxx" />
二.运行Fescar的官方例子
在运行Fescar时需要按照一定的顺序:
1.运行Server.java
2.运行AccountServiceImpl.java
3.运行StorageServiceImpl.java
4.运行OrderServiceImpl.java
当运行完后,如何判断成功呢?
可以在数据库上查找accout_tbl和storage_tbl这两个表是否有数据,在这里运行成功所以我的表格就显示有数据了
而其他两个表是没数据的,所以看到没数据是很正常的
再然后我们开始尝试采用分布式事务方式对数据库进行操作,看是否能成功
运行BusinessServiceImpl.java
当运行成功后,我们会看到原先没数据的order_tbl显示有数据了(我在这里运行了三次,所以有三行数据):
到这里有显示到数据,就代表fescar官方给的demo运行成功
注意:有些人运行完fescar的demo后会出现一个异常信息:
java.lang.RuntimeException: xxx
at com.alibaba.fescar.tm.dubbo.impl.BusinessServiceImpl.purchase(BusinessServiceImpl.java:48)
at com.alibaba.fescar.tm.dubbo.impl.BusinessServiceImpl$$FastClassByCGLIB$$9dbefa1d.invoke(
这个不需要太担心,我们看报错的地方就可以发现这个是demo写的人故意投出来的状态异常,主要是用于中断事务,尝试看fescar是否能支持分布式事务回滚,同时投Exception异常好像是不会引起事务回滚,只有投RuntimeException才会出现事务回滚
到这里一个fescar的官方demo就运行成功了,至于原理和源码在后期会进行分析
文章支持转载,请备注来源网站:https://blog.csdn.net/ASzhiwei