上一篇内容:seata分布式事务(一)环境介绍
代码地址:https://gitee.com/zhaojiyuan/seatademo/releases/1.0.0
-
项目描述:
-
创建一个包含pa和pb两个模块的项目
-
然后再pb项目中添加一个接口,接口功能为:向数据库中添加一条数据
-
然后再pa项目中添加一个接口,接口功能为:向数据库中添加一条数据,然后通过feign组件实现远程调用pb接口,然后手动抛出一个异常
-
-
项目演示:
当调用pa接口时候,会先向数据库添加一条数据,然后调用pb接口添加一条数据,然后手动抛出异常,因为发生了异常,添加到数据库的第一条数据会发生回滚,但是第二条数据因为是通过远程调用的,事务已经提交,因而不会回滚
-
创建演示数据库
以下为Oracle数据库脚本,如果使用Mysql数据库,请自写脚本。
CREATE TABLE tb_seata_test ( nu_id INTEGER, vc_text VARCHAR2(200), dt_create_time DATE ); ALTER TABLE TB_SEATA_TEST ADD CONSTRAINT PK_TB_SEATA_TEST PRIMARY KEY (NU_ID); COMMENT ON TABLE tb_seata_test IS '[分布式事务seata演示数据表]'; COMMENT ON COLUMN tb_seata_test.nu_id IS '[主键ID]'; COMMENT ON COLUMN tb_seata_test.vc_text IS '[事件描述]'; COMMENT ON COLUMN tb_seata_test.dt_create_time IS '[创建时间]';
-
核心代码:
-
pa项目核心代码如下
-
pb项目核心代码如下:
-
-
演示以及效果:
-
调用请求,并发生异常
-
后台pa模块日志
-
后台pb模块日志
-
数据库记录展示,服务发生异常,pb接口插入的没有回滚
-