上一篇内容: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接口插入的没有回滚

-
Seata分布式事务实践

本文通过具体案例展示了Seata在解决分布式事务问题上的应用。在包含pa和pb两个微服务的环境中,通过模拟异常情况来观察Seata如何保证数据一致性。实验表明,在Seata的支持下,尽管pb服务中的事务已提交,但由于整个事务组未能完成,最终能够实现回滚以保持数据一致。
2351

被折叠的 条评论
为什么被折叠?



