栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

分布式事务seata应用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分布式事务seata应用

Seata文档配置

1、简要说明

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。
一阶段:事务协调者通知每一个服务处理本地事务,每个服务开始处理但是不会提交事务,处理完毕后告知协调者。
二阶段:协调者收到所有服务的消息后通知他们提交事务。
Seata的工作机制:
一阶段:先解析SQL生成前后镜像,插入回滚日志,在提交事务前,向协调者申请全局锁后,然后提交本地事务,将提交结果发送给协调者。
二阶段-回滚:收到协调者的回滚请求,执行逆向SQL。
二阶段-提交:收到协调者的提交请求,把请求放入队列中,立刻返回成功结果给协调者。删掉UNDOLOG。
Seata的AT模式:
前提基于支持本地 ACID 事务的关系型数据库。
参与者在本地提交事务,然后返回给协调者,如果参与者发送了提交事务失败,那么协调者就会告知所有参与者回滚,否则会告知所有参与者成功,然后删掉UNDOLOG。
Seata官方文档:https://seata.io/zh-cn/index.html

2、Nacos集成seata配置

通过dataId上传配置至Nacos配置中心
(PS:最新版本-1.4.2开始支持,使用比较简单。如果使用老版本配置结构不一样,本文档不做说明)
步骤:
1首先你需要在nacos新建配置,此处dataId为seataServer.properties,配置内容参考https://github.com/seata/seata/tree/develop/script/config-center 的config.txt并按需修改保存
或者
2将下方zip包导入nacos,更改数据库为本地相关内容

3、Seata服务端配置

1.下载seata的server端最新版(1.4.2)并解压
https://github.com/seata/seata/releases

2.修改 conf/registry.conf 配置
注册中心和配置中心默认是file这里改为nacos;设置 registry 和 config 节点中的type为nacos,修改serverAddr为你的nacos节点地址。

4.初始化数据库
创建一个名为 seata 的数据库,并执行一下sql
Sql地址:
https://github.com/seata/seata/blob/develop/script/server/db/mysql.sql

或者

5.启动seata-server
Windows执行seata-server-1.4.2bin的 seata-server.bat

4、Seata客户端配置

1.增加maven依赖
1.1没有数据库操作的服务(事务发起者):


    com.alibaba.cloud
    spring-cloud-starter-alibaba-seata

1.2有数据库操作的服务(各业务层参与者):


    com.xxxx
    icp-common-seata
    ${project.version}

(icp-common-seata依赖包详见下方5.1应用配置 配置数据源代理)

2.在client客户端(项目中application.yml)加入对应的配置中心和注册中心,红色部分根据实际情况填写

seata:
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      group : "SEATA_GROUP"
      namespace: ""
      dataId: "seataServer.properties"
      username: "nacos"
      password: "nacos"
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group : "SEATA_GROUP"
      namespace: ""
      username: "nacos" 
      password: "nacos" 

PS注意:nacos在项目中的配置需要添加指定group,进行分组管理

最后,启动 Seata-Server 后,会发现Server端的服务出现在 Nacos 控制台中的注册中心列表中. Client 配置完成后启动应用就可以正式体验 Seata 服务。

5、应用配置

1.配置数据源代理
在common模块下添加新模块common-seata

引入依赖


   com.xxxx
   common-mybatis


   com.alibaba.cloud
   spring-cloud-starter-alibaba-seata

Seata是通过代理数据源实现分布式事务,所以需要配置
io.seata.rm.datasource.DataSourceProxy的Bean,且是@Primary默认的数据源,否则事务不会回滚,无法实现分布式事务

public class DataSourceProxyConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DruidDataSource druidDataSource() {
        return new DruidDataSource();
    }

    @Primary
    @Bean
    public DataSourceProxy dataSourceProxy(DruidDataSource druidDataSource) {
        return new DataSourceProxy(druidDataSource);
    }
}
  1. 事务发起者添加全局事务注解
    事务发起者 business-service 添加 @GlobalTransactional 注解
@GlobalTransactional
public void placeOrder(String userId) {
    ......
}

示例:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号