返回顶部
首页 > 资讯 > 后端开发 > Python >springcloud整合seata的实现代码
  • 635
分享到

springcloud整合seata的实现代码

2024-04-02 19:04:59 635人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、背景二、项目结构三、实现功能:四、项目使用到的技术五、整合步骤1、引入spring-cloud-starter-alibaba-seata jar包2、涉及到的业务库操作1、

一、背景

在上一篇文章中,我们使用Seata整合了SpringBoot,在这篇文章中我们使用Seata整合SpringCloud。同时有了上一篇文章的基础,此处我们简单实现。

二、项目结构

三、实现功能:

完成用户下单操作,下单分为调用 账户服务 扣除余额,调用订单服务创建订单。

四、项目使用到的技术

spring cloud 、eureka、openfeign、seata 、Nacos、druid、mybatis-plus

五、整合步骤

1、引入spring-cloud-starter-alibaba-seata jar包

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <version>2021.1</version>
    <exclusions>
        <exclusion>
            <artifactId>seata-spring-boot-starter</artifactId>
            <groupId>io.seata</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

参考文档: https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

2、涉及到的业务库操作

1、业务库需要存在 undo_log 表

CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:nORMal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB COMMENT ='AT transaction mode undo table';

2、业务表主键

业务表中必须包含单列主键,如果存在多列主键,则目前只有Mysql支持。

3、页面中自动更新时间戳

业务表中最好不要自动更新时间戳,使用手动更新,更新数据,只更新用到的数据。
比如:
表中存在10个字段,当前业务只需要更新3个字段,此时我们更新3个字段即可,不要更新10个字段,如果update_time字段是默认更新的,则使用手动更新。

3、开启数据源代理

1、自动配置数据源代理

seata:
  enabled: true
  # 是否自动开启数据源代理
  enable-auto-data-source-proxy: true
  # 数据源代理模式,使用AT模式
  data-source-proxy-mode: AT

2、手动配置AT模式数据源代理

1、配置文件关闭自动数据源代理

seata:
  # 是否自动开启数据源代理
  enable-auto-data-source-proxy: false

2、配置配置数据源

AT模式下返回的数据源一定需要是 DataSourceProxy

@Bean
    public DataSource dataSourceProxy() {
        // 某一个数据源
        XxxDataSource xxxDataSource = new XxxDataSource();
        // 设置数据源的各种配置属性
        xxxDataSource.setXXX("");
        // 使用 DataSourceProxy 来包装一下
        return new DataSourceProxy(xxxDataSource);
    }

4、传递 xid

在引入了 spring-cloud-starter-alibaba-seata 后,很多都已经实现了自动传递 xid 。同时在分布式事务结束后,需要清除xid的值。

默认实现了 feignrestWEB3种方式的 xid的传递。

5、事务分组和seata server对应上

6、注册中心和配置中心

应用程序中 seata 的配置中心和 注册中心 需要和 seata server 的保持一致。

7、业务方法加上@GlobalTransactional 注解

在需要开启分布式事务的方法上加入 @GlobalTransactional 注解,开启分布式事务。

public class BusinessServiceImpl implements BusinessService {
    private final OrderService orderService;
    private final AccountClient accountClient;
    @Override
    // 开启分布式事务
    @GlobalTransactional(rollbackFor = Exception.class)
    public void createAccountOrder(Integer accountId, Long amount, boolean hasException) {
        System.out.println("xid:" + RootContext.getXID());
        // 1、远程扣减账户余额
        remoteDebit(accountId, amount);
        // 2、下订单
        orderService.createOrder(accountId, amount);
        if (hasException) {
            throw new RuntimeException("发生了异常,分布式事物需要会滚");
        }
    }
    private void remoteDebit(Integer accountId, Long amount) {
        String result = accountClient.debit(accountId, amount);
        log.info("远程扣减库存结果:[{}]", result);
    }
}

六、演示

分布式事务发生异常,事务回滚

七、完整代码

Https://gitee.com/huan1993/spring-cloud-parent/tree/master/seata/seata-sprinGCloud-mybatis-plus

八、参考文档

1、新人文档

2、seata常见问题

到此这篇关于springcloud整合seata的文章就介绍到这了,更多相关springcloud整合seata内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: springcloud整合seata的实现代码

本文链接: https://lsjlt.com/news/149319.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springcloud整合seata的实现代码
    目录一、背景二、项目结构三、实现功能:四、项目使用到的技术五、整合步骤1、引入spring-cloud-starter-alibaba-seata jar包2、涉及到的业务库操作1、...
    99+
    2024-04-02
  • seata springcloud整合教程与遇到的坑
    SEATA概要 seata 是alibaba 出的一款分布式事务管理器,他有侵入性小,实现简单等特点。我们能够使用seata 实现分布式事务管理, 是微服务必备的组件。他可以实现在...
    99+
    2024-04-02
  • springcloud整合gateway实现网关的示例代码
    目录1.项目目录:2.代码实现:3.实现效果:1.项目目录: 创建项目gateway作为父类 2.代码实现: 父类依赖 ​ <parent>         <...
    99+
    2024-04-02
  • seata springcloud整合会遇到什么问题
    这篇文章给大家分享的是有关seata springcloud整合会遇到什么问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SEATA概要seata 是alibaba 出的一款分布式事务管理器,他有侵入性小,实现...
    99+
    2023-06-20
  • SpringBoot整合Activiti7的实现代码
    Activiti7发布正式版之后,它与SpringBoot2.x已经完全支持整合开发。我们可以将Activiti7与SpringBoot整合开发的坐标引入到工程中,从而达到SpringBoot支持Activti7整合。 ...
    99+
    2022-06-04
    SpringBoot整合Activiti7 SpringBoot Activiti7
  • SpringBoot整合MongoDB的实现代码
    目录一、添加Maven依赖二、application.yml配置三、代码中使用Mongo1.Mongo适用场景2.以我最近博客开发的一个联系我为例(这里我使用Mongo)MongoD...
    99+
    2024-04-02
  • springboot整合shardingsphere和seata实现分布式事务的实践
    各个框架版本信息 springboot: 2.1.3springcloud: Greenwich.RELEASEseata: 1.0.0shardingsphere:4.0.1 ma...
    99+
    2024-04-02
  • springcloud整合gateway怎么实现网关
    这篇文章主要介绍了springcloud整合gateway怎么实现网关的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springcloud整合gateway怎么实现网关文章都会有所收获,下面我们一起来看看吧。1...
    99+
    2023-06-26
  • springboot整合seata的配置过程
    前言: 小编引入的图片和文字描述都是来自于尚硅谷的视频讲解,在此感谢尚硅谷的老师,同时也结合 seata文档官方文档进行整合项目地址(gitee): https://gitee.co...
    99+
    2024-04-02
  • SpringBoot整合WebService服务的实现代码
    目录为什么使用WebService?适用场景: 不适用场景:Axis2与CXF的区别SpringBoot使用CXF集成WebServiceWebService是一个SOA(...
    99+
    2024-04-02
  • springcloud整合nacos实现注册发现中心
    文章目录 微服务为什么需要服务注册发现中心怎么使用注册发现中心1.本示例环境2.nacos 安装3.pom.xml4.application.yml5.NacosDiscoveryDemoCo...
    99+
    2023-09-07
    spring cloud java spring boot
  • SpringBoot整合Netty实现WebSocket的示例代码
    目录一、pom.xml依赖配置二、代码2.1、NettyServer 类2.2、SocketHandler 类2.3、ChannelHandlerPool 类2.4、Applicat...
    99+
    2024-04-02
  • SpringBoot整合Shiro实现权限控制的代码实现
    1、SpringBoot整合Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。 1.1、shiro简介 shiro有个核心组...
    99+
    2024-04-02
  • Springboot整合https的实例代码
    目录1 简介2 密码学基础2.1 密码体制2.2 两种加密方式2.2.1 对称加密2.2.2 非对称加密2.3 证书3 Springboot整合HTTPS3.1 先让Web跑起来3....
    99+
    2024-04-02
  • SpringBoot整合JPA的实例代码
    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该...
    99+
    2023-05-31
    spring boot jpa
  • SpringBoot整合freemarker实现代码生成器
    目录一、介绍二、代码实践2.1、首先我们添加 freemarker 依赖包2.2、然后创建一个代码模版2.3、最后生成目标代码三、小结一、介绍 在实际的软件项目开发过程中,我可以很负...
    99+
    2023-03-14
    SpringBoot freemarker代码生成器 SpringBoot freemarker SpringBoot代码生成器
  • SpringBoot整合MongoDB完整实例代码
    目录一、新建项目二、docker-compose 配置mongoDB三、SpringBoot配置MongoDB问题:Exception authenticating MongoCre...
    99+
    2024-04-02
  • Spring整合Redis完整实例代码
    做过大型软件系统的同学都知道,随着系统数据越来越庞大,越来越复杂,随之带来的问题就是系统性能越来越差,尤其是频繁操作数据库带来的性能损耗更为严重。很多业绩大牛为此提出了众多的解决方案和开发了很多框架以优化这种频繁操作数据库所带来的性能损耗,...
    99+
    2023-05-31
    spring redis edi
  • springcloud 整合 openfeign的方法
    目录一、openfeign简介二、使用1、依赖2、配置文件  3、启动类 4、接口5、controller一、openfeign简介 Feign是Nef...
    99+
    2024-04-02
  • Java springboot 整合 Nacos的实例代码
    Nacos注册中心使用 1)工程添加依赖包 <!-- nacos注册中心依赖包 --> <dependency> <groupId>c...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作