分布式事务框架seata一(seata客户端)

Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。因此,客户端承担了TM和TM的角色。

服务端见博文:https://blog.csdn.net/chuixue24/article/details/108071970

本文为实现seata分布式事务中的AT模式。

在与dubbo进行整合时,客户端又分为dubbo的服务提供端(Provider)和消费端(consumer),下边是对这两种类型客户端的整合示例。

seata客户端——服务提供端

执行脚本

客户端也需要执行sql脚本:

-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE seata_undo_log
(
    id            NUMBER(19)    NOT NULL,
    branch_id     NUMBER(19)    NOT NULL,
    xid           VARCHAR2(100) NOT NULL,
    context       VARCHAR2(128) NOT NULL,
    rollback_info BLOB          NOT NULL,
    log_status    NUMBER(10)    NOT NULL,
    log_created   TIMESTAMP(0)  NOT NULL,
    log_modified  TIMESTAMP(0)  NOT NULL,
    PRIMARY KEY (id),
    CONSTRAINT ux_undo_log UNIQUE (xid, branch_id)
);

COMMENT ON TABLE seata_undo_log IS 'AT transaction mode undo table';

-- Generate ID using sequence and trigger
CREATE SEQUENCE UNDO_LOG_SEQ START WITH 1 INCREMENT BY 1;

部署所需脚本见:https://github.com/seata/seata/tree/1.3.0/script

引入依赖

compile group: 'io.seata', name: 'seata-all', version: '1.3.0'

配置文件 

修改registry.conf(修改内容和服务端保持一致,如何修改可以参考

https://blog.csdn.net/chuixue24/article/details/108071970#%E4%BF%AE%E6%94%B9registry.conf%C2%A0),

修改后放入工程的resource目录下:

分布式事务框架seata一(seata客户端)_第1张图片

数据源代理DataSourceProxy

如果是用springboot或springcloud,可以参考http://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

我的项目是一个基于spring4.3的旧项目,还是xml配置文件的形式。

分布式事务框架seata一(seata客户端)_第2张图片

 DataSourceProxy源码分析可以参考:https://blog.csdn.net/a315157973/article/details/105466230

全局事务扫描器GlobalTransactionScanner

GlobalTransactionScanner源码分析可以参考:https://blog.csdn.net/a315157973/article/details/104288598

分布式事务框架seata一(seata客户端)_第3张图片

以上配置有这么一句:my_test_tx_group"/> ,my_test_tx_group为事务组,是在config.txt文件中指定的

分布式事务框架seata一(seata客户端)_第4张图片

中的mdm为当前项目的dubbo应用名字:

分布式事务框架seata一(seata客户端)_第5张图片

启动 

如果是一个服务提供端,那么以上配置就可以了。启动刚配置的工程,启动成功会看到:

如果启动过程中有以下错误:

ERROR | no available service 'null' found, please make sure registry config correct

请检查从config.txt导入到nacos中的 service.vgroupMapping.后的名字是否和全局扫描器中的事务局是否一致。

seata客户端——消费端

消费端的配置和服务提供的的配置差不多一样,不同的是,消费端会调用服务端,调用时会用到seata的@GlobalTransactional注解:
分布式事务框架seata一(seata客户端)_第6张图片

 

分布式事务测试

在测试代码中,会抛出一个异常:

分布式事务框架seata一(seata客户端)_第7张图片

消费端控制台日志:

分布式事务框架seata一(seata客户端)_第8张图片 服务提供端日志:

查数据库结果,在java.lang.ArithmeticException: / by zero异常前插入数据库的记录已删除,说明分布式事务是生效的。 

你可能感兴趣的:(seata,分布式事物,java架构,seata,分布式事务)