阿里分布式事务框架fescar环境快速搭建以及简易使用fescar官方demo

Fescar是什么?

Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景,它的前身是阿里的全局事务服务GTS,不过GTS是商用的不开源,可以这样认为Fescar就是GTS的开源版,关于它的一些理论,在接下来我会出一系列的关于fescar理论介绍及源码解读文章,在这里先将介绍如何快速运行fescar的官方demo

一.安装Fescar环境

首先去Fescar的githup官网上,下载源码,Fescar的官方链接如下:

Fescar官方源码

在下载完后,以Maven项目的导入方式导入,在这里我使用的IDE是Eclipse,导入以后的目录页面如下:

阿里分布式事务框架fescar环境快速搭建以及简易使用fescar官方demo_第1张图片

其中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环境快速搭建以及简易使用fescar官方demo_第2张图片

然后在这几个文件上配置数据库的相关信息,注意我们使用的数据库名称是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这两个表是否有数据,在这里运行成功所以我的表格就显示有数据了

阿里分布式事务框架fescar环境快速搭建以及简易使用fescar官方demo_第3张图片

阿里分布式事务框架fescar环境快速搭建以及简易使用fescar官方demo_第4张图片

而其他两个表是没数据的,所以看到没数据是很正常的

再然后我们开始尝试采用分布式事务方式对数据库进行操作,看是否能成功

运行BusinessServiceImpl.java

当运行成功后,我们会看到原先没数据的order_tbl显示有数据了(我在这里运行了三次,所以有三行数据):

阿里分布式事务框架fescar环境快速搭建以及简易使用fescar官方demo_第5张图片

到这里有显示到数据,就代表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

 

你可能感兴趣的:(fescar,快速使用,搭建fescar,分布式事务,分布式)