分布式事务框架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目录下:

数据源代理DataSourceProxy

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

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

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

全局事务扫描器GlobalTransactionScanner

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

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

<constructor-arg value="mdm"/>中的mdm为当前项目的dubbo应用名字:

启动 

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

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

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

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

seata客户端——消费端

消费端的配置和服务提供的的配置差不多一样,不同的是,消费端会调用服务端,调用时会用到seata的@GlobalTransactional注解:

 

分布式事务测试

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

消费端控制台日志:

 服务提供端日志:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值