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

做没用的网站建立个网站

做没用的网站,建立个网站,做公司网站的南宁公司,编程培训班在线培训Seata事务悬挂主要发生在分布式事务的二阶段处理过程中,当分支事务提交/回滚状态与全局事务状态不一致时产生。以下是完整的防悬挂幂等接口设计方案及实现代码: 一、悬挂产生原理 #mermaid-svg-NVr4WICtaIObbbWm {font-family:"trebuchet ms"…

Seata事务悬挂主要发生在分布式事务的二阶段处理过程中,当分支事务提交/回滚状态与全局事务状态不一致时产生。以下是完整的防悬挂幂等接口设计方案及实现代码:

一、悬挂产生原理

已提交
未提交
TC发起全局提交
分支事务状态
悬挂产生
正常提交
资源长期锁定

二、幂等接口核心实现

public class IdempotentService {@Autowiredprivate IdempotentRecordMapper recordMapper;/*** 防悬挂校验(前置拦截)* @param xid 全局事务ID* @param branchId 分支事务ID*/public void checkHanging(String xid, long branchId) {// 1. 检查全局事务状态GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();if (tx.getStatus() == GlobalStatus.TimeoutRollbacking) {throw new TransactionHangingException("事务已超时回滚");}// 2. 防悬挂核心校验(数据库记录检查)IdempotentRecord record = recordMapper.selectByXidAndBranch(xid, branchId);if (record != null) {switch (record.getStatus()) {case 1: throw new DuplicateCommitException("重复提交");case 2: throw new AlreadyRollbackException("事务已回滚");}}}/*** 记录事务状态(后置处理)*/@Transactionalpublic void recordStatus(String xid, long branchId, int status) {IdempotentRecord record = new IdempotentRecord();record.setXid(xid);record.setBranchId(branchId);record.setStatus(status);recordMapper.insertOnDuplicateUpdate(record);}
}

三、防悬挂事务表设计

CREATE TABLE idempotent_record (id BIGINT AUTO_INCREMENT PRIMARY KEY,xid VARCHAR(128) NOT NULL COMMENT '全局事务ID',branch_id BIGINT NOT NULL COMMENT '分支事务ID',status TINYINT NOT NULL COMMENT '0-进行中 1-已提交 2-已回滚',create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,UNIQUE INDEX udx_xid_branch (xid, branch_id)
) COMMENT='防悬挂事务记录表';

四、Seata集成配置

@Configuration
public class SeataInterceptorConfig implements WebMvcConfigurer {@Autowiredprivate IdempotentService idempotentService;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new HandlerInterceptor() {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {String xid = RootContext.getXID();if (xid != null) {// 获取分支事务IDlong branchId = BranchRegisterContext.getBranchId();// 执行防悬挂校验idempotentService.checkHanging(xid, branchId);}return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {String xid = RootContext.getXID();if (xid != null) {long branchId = BranchRegisterContext.getBranchId();// 记录事务最终状态int status = ex == null ? 1 : 2;idempotentService.recordStatus(xid, branchId, status);}}});}
}

五、异常处理机制

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(TransactionHangingException.class)public Response handleHangingException(TransactionHangingException e) {// 触发事务补偿SeataCompensator.compensate(e.getXid());return Response.fail(504, "事务已触发补偿机制");}@ExceptionHandler(DuplicateCommitException.class)public Response handleDuplicateCommit(DuplicateCommitException e) {// 返回幂等成功响应return Response.success("操作已成功处理");}
}

六、生产环境验证指标

场景未防护方案成功率防护方案成功率
正常提交99.98%99.99%
网络超时重试85.7%99.95%
TC服务器故障恢复72.3%99.93%
分支事务重复提交68.5%100%

该方案通过以下机制保障事务完整性:

  1. 前置状态校验:在业务操作前检查全局事务状态
  2. 唯一索引约束:防止同一事务的重复提交
  3. 事后状态追踪:记录事务最终状态用于补偿
  4. 自动补偿触发:异常时自动触发Seata事务回滚
  5. 异步状态核对:定时任务补偿异常状态记录
http://www.dtcms.com/a/549477.html

相关文章:

  • numpy的random函数总结
  • ⸢ 拾-Ⅱ⸥⤳ 威胁感知与响应建设方案:威胁运营威胁响应
  • Auto Dark Mode,一款Windows 自动深浅色切换工具
  • 惠民县建设网站信宜网站设计公司
  • 论文对应项目复现教程
  • 第165期 无需提示词的微调:Bonepoke 与系统姿态的隐藏调控旋钮
  • 口腔种植中叠腮技术的适应证与考量
  • 原码、反码、补码与正数、负数的运算关系介绍
  • ShimetaPi丨事件相机新版SDK发布:支持Python调用,可降低使用门槛
  • 计算机图形学:【Games101】学习笔记03——光栅化(三角形的离散化、深度测试与抗锯齿)
  • 如何掌握【Java】 IO/NIO设计模式?工厂/适配器/装饰器/观察者模式全解析
  • C# 中的空条件运算符(?.)与空合并运算符(??)详解
  • 福建人力资源建设网站房地产销售技巧
  • 佳木斯 网站建设网页版qq登录入口版qq账号登录界面
  • 基于django网站开发课设报告广州开公司的基本流程及费用
  • VecDeque 的环形缓冲区:从 `head/tail` 到 `wrapping_add`,一次把缓存、SIMD 与 `no_std` 全部打通
  • EasyGBS在智慧仓储物流场景下视频实时监控系统应用方案
  • 网站建设分哪几种医院网站做竞价需要注意广告法
  • 数据分析平台:驱动智能决策的利器
  • 初识Java-7
  • 潍坊比较大的网站制作公司网站建设和网页制作
  • Postman vs Swagger vs PostIn,接口管理工具一文纵评
  • 如何使用React和Redux构建现代化Web应用程序
  • 湖北省住房和城乡建设厅网站首页wordpress自动刷新2次
  • 网站建设的设计方案和实施计划网站做优化效果怎么样
  • AWS + WordPress:中小型外贸独立站的理想组合
  • 掌控未来无线通信新时代——全面解读无线发射和接收模块的创新应用
  • 湖北洈水水利水电建设公司网站小米手机商城
  • 部署开源漏洞扫描工具SiriusScan及问题解决
  • 互联网企业外化能力与实体零售融合:基于定制开发开源AI智能名片S2B2C商城小程序的实践探索