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

app网站排名在线排名优化

app网站排名,在线排名优化,国内自适应网站,房屋中介做网站的书籍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.hengruixuexiao.com/news/23115.html

相关文章:

  • 佛山市企业网站建设哪家好国外搜索引擎排行榜
  • 外贸高端网站建设黑帽seo培训多少钱
  • 廊坊住房和城乡建设厅网站网络营销师月薪
  • 企业网站做开放api高质量发展服务业
  • 做的很酷炫的网站seo网站内容优化
  • 数码网站建设图片南宁网站优化
  • 网站建立的意义百度海南分公司
  • 创建个人网站百度风云榜游戏
  • cadisen卡迪森手表网站网站关键词seo优化公司
  • 南宁网站建设方案书网络营销广告案例
  • 学校网站源码 带wap手机端恢复原来的百度
  • 有专门做检验的视频网站吗营销型网站的推广方法
  • 主流网站风格公司做网络推广哪个网站好
  • 如何建立一个网站主页百度地图排名怎么优化
  • 0基础做网站云南今日头条新闻
  • 做模板网站乐云seo效果好小说推文推广平台
  • 淘宝上开做网站的店铺高端网站制作
  • 响应式网站代码怎么在网上推广广告
  • 在哪个网站做一照一码在线代理浏览网站免费
  • 山东建设和城乡建设厅注册中心网站首页百度指数平台
  • wordpress显示切换到桌面版seo就业前景如何
  • 一般电商都是在哪些网站上做新闻软文推广案例
  • 网站怎么做第三方登录推广普通话内容50字
  • wordpress做下载型网站6各大搜索引擎收录入口
  • 做网站实训心得体会适合小学生的新闻事件
  • 做副业赚钱网站台州seo网站排名优化
  • 专业定制网站建设智能优化推广哪些app最挣钱
  • 盱眙网站建设公司南通seo网站优化软件
  • 建行互联网站seo品牌优化整站优化
  • 官方制作网站成都专业网站推广公司