项目作者: fangls

项目描述 :
基于spring cloud+spring jpa+spring cloud alibaba fescar+mysql+seata的分布式示例
高级语言: Java
项目地址: git://github.com/fangls/seata-sample.git
创建时间: 2019-04-08T02:13:53Z
项目社区:https://github.com/fangls/seata-sample

开源协议:

下载


seata-sample

基于spring cloud+spring jpa+spring cloud alibaba fescar+mysql+seata的分布式示例

分布式事务之Seata中间件原理及流程详细分析

准备工作

  1. 执行数据库脚本
  2. 启动fescar server
    使用默认配置
  3. 启动启动business、storage、account、order
    数据库默认连接127.0.0.1:3306,不同的注意修改
  4. 事务成功
    GET 127.0.0.1:8084/purchase?userId=1001&commodityCode=2001&orderCount=1
  5. 事务回滚 GET 127.0.0.1:8084/purchase?userId=1001&commodityCode=2001&orderCount=5

数据库脚本

  1. create schema db_account;
  2. use db_account;
  3. CREATE TABLE `account_tbl` (
  4. `id` int(11) NOT NULL AUTO_INCREMENT,
  5. `user_id` varchar(255) DEFAULT NULL,
  6. `money` int(11) DEFAULT 0,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  9. INSERT INTO account_tbl (id, user_id, money) VALUES (1, '1001', 10000);
  10. CREATE TABLE `undo_log` (
  11. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  12. `branch_id` bigint(20) NOT NULL,
  13. `xid` varchar(100) NOT NULL,
  14. `rollback_info` longblob NOT NULL,
  15. `log_status` int(11) NOT NULL,
  16. `log_created` datetime NOT NULL,
  17. `log_modified` datetime NOT NULL,
  18. `ext` varchar(100) DEFAULT NULL,
  19. PRIMARY KEY (`id`),
  20. UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
  21. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
  22. create schema db_order;
  23. use db_order;
  24. CREATE TABLE `order_tbl` (
  25. `id` int(11) NOT NULL AUTO_INCREMENT,
  26. `user_id` varchar(255) DEFAULT NULL,
  27. `commodity_code` varchar(255) DEFAULT NULL,
  28. `count` int(11) DEFAULT '0',
  29. `money` int(11) DEFAULT '0',
  30. PRIMARY KEY (`id`)
  31. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
  32. CREATE TABLE `undo_log` (
  33. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  34. `branch_id` bigint(20) NOT NULL,
  35. `xid` varchar(100) NOT NULL,
  36. `rollback_info` longblob NOT NULL,
  37. `log_status` int(11) NOT NULL,
  38. `log_created` datetime NOT NULL,
  39. `log_modified` datetime NOT NULL,
  40. `ext` varchar(100) DEFAULT NULL,
  41. PRIMARY KEY (`id`),
  42. UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
  43. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
  44. create schema db_storage;
  45. use db_storage;
  46. CREATE TABLE `storage_tbl` (
  47. `id` int(11) NOT NULL AUTO_INCREMENT,
  48. `commodity_code` varchar(255) DEFAULT NULL,
  49. `count` int(11) DEFAULT '0',
  50. PRIMARY KEY (`id`),
  51. UNIQUE KEY `commodity_code` (`commodity_code`)
  52. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
  53. INSERT INTO storage_tbl (id, commodity_code, count) VALUES (1, '2001', 1000);
  54. CREATE TABLE `undo_log` (
  55. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  56. `branch_id` bigint(20) NOT NULL,
  57. `xid` varchar(100) NOT NULL,
  58. `rollback_info` longblob NOT NULL,
  59. `log_status` int(11) NOT NULL,
  60. `log_created` datetime NOT NULL,
  61. `log_modified` datetime NOT NULL,
  62. `ext` varchar(100) DEFAULT NULL,
  63. PRIMARY KEY (`id`),
  64. UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
  65. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;