当前位置: 首页 > wzjs >正文

浏览器大全网站如何做网页链接

浏览器大全网站,如何做网页链接,网站外包注意事项,网站的icon图标做多大目录 一、Sharding-JDBC 分布式事务介绍 二、XA 事务实战(Atomikos 实现) 步骤 1:引入依赖 步骤 2:引入配置 步骤 3:业务代码注解驱动 三、BASE 事务实战(Seata AT 模式) Seata 的核心组件…

目录

一、Sharding-JDBC 分布式事务介绍

 二、XA 事务实战(Atomikos 实现)

步骤 1:引入依赖

步骤 2:引入配置

步骤 3:业务代码注解驱动

三、BASE 事务实战(Seata AT 模式)

Seata 的核心组件

启动 Seata Server

创建 undo_log 表

引入依赖

在 classpath 中增加 seata.conf 文件

其他配置

业务代码注解驱动

四、XA 事务的实现原理

开启全局事务

执行真实分片SQL

提交或回滚事务

 五、SEATA 事务的实现原理

引擎初始化

开启全局事务

执行真实分片SQL

提交或回滚事务


一、Sharding-JDBC 分布式事务介绍

Sharding-JDBC 分布式事务是解决分库分表环境下数据一致性的关键,Sharding-JDBC 提供了3种事务的解决方案,对比如下:

模式原理适用场景一致性
LOCAL各库独立提交事务,无全局协调单库操作或容忍部分失败弱一致性
XA (2PC)事务管理器协调多库,通过 prepare/commit 两阶段保证强一致性强一致性需求(如金融交易)强一致性
BASE (Seata)Seata 的 AT 模式生成反向 SQL 日志,异步补偿实现最终一致性高并发场景(如电商订单)最终一致性

 LOCAL 支持单库事务。XA支持单服务跨库事务,但不支持跨服务的事务。BASE 支持跨库跨服务的事务。

Sharding 官方文档:https://shardingsphere.apache.org/document/5.2.1/cn/overview/

 Sharding XA 事务 Demo:https://gitee.com/original-intention/shareding-5.2.1-demo

 Sharding BASE 事务 Demo:https://gitee.com/original-intention/sharding-5.2.1-base-demo


 二、XA 事务实战(Atomikos 实现)

项目代码在上面。

步骤 1:引入依赖
        <!-- 使用XA事务时,需要引入此模块 --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-transaction-xa-core</artifactId><version>5.2.1</version></dependency><dependency><groupId>com.atomikos</groupId><artifactId>transactions-jta</artifactId><version>4.0.4</version></dependency>
步骤 2:引入配置
spring.shardingsphere.props.xa-transaction-manager-type= Atomikos
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration

具体配置在项目 application-xa.properties 配置文件中

步骤 3:业务代码注解驱动
    @ShardingSphereTransactionType(TransactionType.XA)  // 声明使用XA事务@Transactional  // Spring事务注解public void noCrossService() {for (Long i = 1L; i < 10L; i++) {Course c = new Course();c.setCname("java");c.setUserId(i);c.setCstatus("1");courseMapper.insert(c);}}

具体代码位置在 com.gorgor.shardingjdbc.service.XaService 类


关键注意事项:

  • 日志文件:Atomikos 生成 xa_tx.log 用于崩溃恢复,禁止删除14。

  • 隔离级别:默认读未提交(Read Uncommitted),需通过数据库自身(如 MySQL 的 RR 级别)提升。

三、BASE 事务实战(Seata AT 模式)

Seata 的核心组件

分为三类角色

  •     TC (Transaction Coordinator):事务协调器(独立部署),维护全局和分支事务的状态,驱动全局事务提交或回滚。
  •     TM (Transaction Manager):事务管理器(集成在业务服务),定义全局事务的范围:开始全局事务、提交或回滚全局事务(通过 @GlobalTransactional 注解触发)。
  •     RM (Resource Manager):资源管理器(集成在业务服务),管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
启动 Seata Server

其中,TC 为单独部署的 Server 服务端,TM 和 RM 为嵌入到应用中的 Client 客户端。Seata Server(TC)环境搭建,请参考我另一篇seata的文章,Seata Server(TC)环境搭建,这里就不在重复讲解。

创建 undo_log 表

在每一个分片数据库实例中执创建 undo_log 表(以 MySQL 为例)。

CREATE TABLE IF NOT EXISTS `undo_log`
(`id`            BIGINT(20)   NOT NULL AUTO_INCREMENT COMMENT 'increment id',`branch_id`     BIGINT(20)   NOT NULL COMMENT 'branch transaction id',`xid`           VARCHAR(100) 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     NOT NULL COMMENT 'create datetime',`log_modified`  DATETIME     NOT NULL COMMENT 'modify datetime',PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDBAUTO_INCREMENT = 1DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
引入依赖
        <!-- 使用BASE事务时,需要引入此模块 --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-transaction-base-seata-at</artifactId><version>5.2.1</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>
在 classpath 中增加 seata.conf 文件
client {application.id = shardingJdbc-seata-currtransaction.service.group =default_tx_group
}
其他配置

其他具体 seata 配置在 application-base.yml 中。

业务代码注解驱动
  /*** 跨服务事务操作-BASE*/@ShardingSphereTransactionType(TransactionType.BASE)@Transactional  // Spring事务注解public void crossService() {for (Long i = 1L; i < 5L; i++) {Course c = new Course();c.setCname("java");c.setUserId(i);c.setCstatus("1");courseMapper.insert(c);}SeckillOrderDTO dto = SeckillOrderDTO.builder().userId(1594L).goodsId(1L).goodsName("java").activityPrice(new BigDecimal(10)).quantity(1).orderPrice(new BigDecimal(10)).activityId(1L).build();RootContext.getXID();String orderDetails = orderFeignApi.saveSeckillOrder(dto);System.out.println("rpc获取的结果:"+orderDetails);int i=1/0;}

具体代码在 com.gorgor.shardingjdbc.service.BaseService 类


四、XA 事务的实现原理

XAShardingSphereTransactionManager 为 Apache ShardingSphere 的分布式事务的 XA 实现类。 它主要负责对多数据源进行管理和适配,并且将相应事务的开启、提交和回滚操作委托给具体的 XA 事务管理器。

XA事务实现原理

开启全局事务

收到接入端的 set autoCommit=0 时,XAShardingSphereTransactionManager 将调用具体的 XA 事务管理器开启 XA 全局事务,以 XID 的形式进行标记。

执行真实分片SQL

XAShardingSphereTransactionManager 将数据库连接所对应的 XAResource 注册到当前 XA 事务中之后,事务管理器会在此阶段发送 XAResource.start 命令至数据库。 数据库在收到 XAResource.end 命令之前的所有 SQL 操作,会被标记为 XA 事务。

例如:

XAResource1.start             ## Enlist阶段执行
statement.execute("sql1");    ## 模拟执行一个分片SQL1
statement.execute("sql2");    ## 模拟执行一个分片SQL2
XAResource1.end               ## 提交阶段执行

示例中的 sql1 和 sql2 将会被标记为 XA 事务。

提交或回滚事务

XAShardingSphereTransactionManager 在接收到接入端的提交命令后,会委托实际的 XA 事务管理进行提交动作, 事务管理器将收集到的当前线程中所有注册的 XAResource,并发送 XAResource.end 指令,用以标记此 XA 事务边界。 接着会依次发送 prepare 指令,收集所有参与 XAResource 投票。 若所有 XAResource 的反馈结果均为正确,则调用 commit 指令进行最终提交; 若有任意 XAResource 的反馈结果不正确,则调用 rollback 指令进行回滚。 在事务管理器发出提交指令后,任何 XAResource 产生的异常都会通过恢复日志进行重试,以保证提交阶段的操作原子性,和数据强一致性。

例如:

XAResource1.prepare           ## ack: yes
XAResource2.prepare           ## ack: yes
XAResource1.commit
XAResource2.commitXAResource1.prepare           ## ack: yes
XAResource2.prepare           ## ack: no
XAResource1.rollback
XAResource2.rollback

 五、SEATA 事务的实现原理

整合 Seata AT 事务时,需要将 TM,RM 和 TC 的模型融入 Apache ShardingSphere 的分布式事务生态中。 在数据库资源上,Seata 通过对接 DataSource 接口,让 JDBC 操作可以同 TC 进行远程通信。 同样,Apache ShardingSphere 也是面向 DataSource 接口,对用户配置的数据源进行聚合。 因此,将 DataSource 封装为 基于Seata 的 DataSource 后,就可以将 Seata AT 事务融入到 Apache ShardingSphere的分片生态中。

柔性事务Seata

引擎初始化

包含 Seata 柔性事务的应用启动时,用户配置的数据源会根据 seata.conf 的配置,适配为 Seata 事务所需的 DataSourceProxy,并且注册至 RM 中。

开启全局事务

TM 控制全局事务的边界,TM 通过向 TC 发送 Begin 指令,获取全局事务 ID,所有分支事务通过此全局事务 ID,参与到全局事务中;全局事务 ID 的上下文存放在当前线程变量中。

执行真实分片SQL

处于 Seata 全局事务中的分片 SQL 通过 RM 生成 undo 快照,并且发送 participate 指令至 TC,加入到全局事务中。 由于 Apache ShardingSphere 的分片物理 SQL 采取多线程方式执行,因此整合 Seata AT 事务时,需要在主线程和子线程间进行全局事务 ID 的上下文传递。

提交或回滚事务

提交 Seata 事务时,TM 会向 TC 发送全局事务的提交或回滚指令,TC 根据全局事务 ID 协调所有分支事务进行提交或回滚。


文章转载自:

http://2hcbrhCh.gywxq.cn
http://VYYBDIFA.gywxq.cn
http://3McEoFfX.gywxq.cn
http://1Jlgxq9u.gywxq.cn
http://pJUW8c6Q.gywxq.cn
http://ENe01OWM.gywxq.cn
http://nBIkl75Z.gywxq.cn
http://KkNMLqvb.gywxq.cn
http://C6QaIr0G.gywxq.cn
http://aZCb9vg6.gywxq.cn
http://G5uG00Dc.gywxq.cn
http://7CzbrwrQ.gywxq.cn
http://hMapzDQj.gywxq.cn
http://1kgvzGuT.gywxq.cn
http://ySi0zKX3.gywxq.cn
http://aJkTzgwa.gywxq.cn
http://ASDi1DLr.gywxq.cn
http://DqFgAPiS.gywxq.cn
http://WUGxu0HX.gywxq.cn
http://2BSqoXuv.gywxq.cn
http://G7OqgZoM.gywxq.cn
http://skzrrzX8.gywxq.cn
http://54Gi8tSd.gywxq.cn
http://AuBDnReQ.gywxq.cn
http://9CLPOMU8.gywxq.cn
http://tp8DWp2o.gywxq.cn
http://r65wbXJx.gywxq.cn
http://GJbqqVyT.gywxq.cn
http://Pm4ugWfW.gywxq.cn
http://Q0mdqbAV.gywxq.cn
http://www.dtcms.com/wzjs/654116.html

相关文章:

  • 烟台网站排名优化报价网站php文件上传
  • 成都家居网站建设电商设计用什么软件
  • 定制程序网站网站开发工具 知乎
  • 南京网站建设方案宾馆管理系统
  • 网页制作与网站建设宝典扫描版pdf太原百度网站排名优化
  • thinkphp制作网站开发大连软件培训
  • 域名备案后怎样做网站西安网站建设风尚
  • 重庆门户网站有哪些成品网站免费下载
  • 慈溪网站制作杭州公司申请车牌需要什么条件
  • 淘宝网站经营与建设论文东莞市营销网站建设
  • 个人网站取名手机网站建设的第一个问题
  • 广州做网站比较有名的公司wordpress添加新页面
  • 怎么找到仿牌外贸出口公司的网站贵州定制型网站建设
  • 商城网站建设预算WordPress旋转图标
  • 外国网站上做雅思考试网站推广的资源合作推广
  • 工业设计网站 知乎wordpress 可以多用户
  • 汽车最全的网站什么是网站名称文件夹
  • 做任务领积分兑换别的网站上的会员租房子做民宿在哪个网站
  • 空气炸锅做糕点的网站虚拟空间软件下载
  • 专业柳州网站建设价格cute wordpress主题
  • 开公司可以在哪些网站做推广gta5买办公室 网站正在建设
  • 58同城济南网站建设南通网站建设机构
  • 青岛中小企业建设网站有扶持资金吗手机网站制作良心服务
  • 全球云邮登陆网站淄博网站设计制作
  • 废品网站怎么做公众号怎么开通留言功能
  • 广州外贸网站建站微信小程序开发方案怎么做
  • 安顺市哪里可以做网站福州十大设计公司
  • wordpress去掉cat广州seo黑帽培训
  • 如何创建设计个人网站网站开发是做什么
  • 宁波建网站选哪家好点跳转网站