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

凡科建站代理登录入口wordpress首页不显示整篇文章

凡科建站代理登录入口,wordpress首页不显示整篇文章,广东深圳宝安区,不注册公司可以做网站吗【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 1. 为什么Transactional在跨服务调用时不生效? 技术本质(结合代码示例): 在postComment方法中: // 本地数据库操作&#xff08…

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版

1. 为什么@Transactional在跨服务调用时不生效?

技术本质(结合代码示例):
postComment方法中:

// 本地数据库操作(可被@Transactional管理)
videoCommentMapper.insert(comment); // 跨服务调用(不受@Transactional控制)
videoClient.updateCountInfo(comment.getVideoId(),...); 

问题根源:

  1. 事务隔离性:
    @Transactional只能管理当前服务的数据库连接
    videoClient.updateCountInfo()通过HTTP调用其他服务,属于独立事务
  2. 两阶段问题:
    • 阶段1:本地insert成功提交
    • 阶段2:远程调用失败时,本地事务无法自动回滚
  3. CAP理论限制:
    • 跨服务操作涉及网络分区容忍性,传统事务模型无法保证CP

生活化比喻:

就像你网购时:

  • 商家(服务A)确认发货(本地事务提交)
  • 但快递(服务B)丢件了(远程调用失败)
  • 没有平台(Seata)协调的话,钱货两失!

2. Seata解决方案全流程

第一步:启动Seata服务

  1. 下载Seata Server(1.6.1+)
  2. 配置注册中心(修改conf/registry.conf):
    registry {type = "nacos"nacos { serverAddr = "127.0.0.1:8848"namespace = "你的命名空间" # 可选}
    }
    
  3. 启动:bin/seata-server.sh -p 8091 -h 127.0.0.1

第二步:数据库准备
在每个业务库执行:

-- Seata核心表(用于事务协调)
CREATE TABLE IF NOT EXISTS `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- Seata Server需要的表(在独立数据库执行)
CREATE TABLE `global_table` (...);
CREATE TABLE `branch_table` (...);
CREATE TABLE `lock_table` (...);

第三步:项目配置

  1. 添加依赖(所有微服务):

    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2.2.6.RELEASE</version>
    </dependency>
    
  2. Nacos配置(以video-service为例):

    spring:cloud:alibaba:seata:tx-service-group: video-service-group # 与Seata Server配置一致seata:registry:type: nacosnacos:server-addr: 127.0.0.1:8848config:type: nacos
    

第四步:代码改造
postComment方法上:

@GlobalTransactional(rollbackFor = Exception.class,  // 所有异常都回滚timeoutMills = 60000,          // 超时时间(毫秒)name = "postCommentTx"         // 全局事务名(可查日志)
)
public void postComment(VideoComment comment, Integer replyCommentId) {// 原业务逻辑不变// Seata会自动拦截以下操作:// 1. videoCommentMapper.insert()// 2. videoClient.updateCountInfo()
}

关键机制:

  1. 事务ID传播:
    • Seata通过XID(全局事务ID)串联各服务
    • 自动通过Feign请求头传递seata_xid=123456
  2. 二阶段提交:
    第一阶段:准备阶段(Prepare)
    事务管理器 Seata服务端(TC) 服务A(RM) 服务B(RM) 1. 开启全局事务(XID=123) 2. 执行SQL并注册分支事务 3. 报告准备状态(就绪) 4. 调用远程服务并注册分支 5. 报告准备状态(就绪) 所有RM返回"就绪"后 进入第二阶段 事务管理器 Seata服务端(TC) 服务A(RM) 服务B(RM)

第二阶段:提交/回滚(Commit/Rollback)

事务管理器 Seata服务端(TC) 服务A(RM) 服务B(RM) RM1/RM2 6. 提交指令 7. 提交指令 8. 删除undo_log 6. 回滚指令 7. 回滚指令 8. 用undo_log恢复数据 alt [全部成功] [任一失败] 9. 最终状态通知 事务管理器 Seata服务端(TC) 服务A(RM) 服务B(RM) RM1/RM2
  1. 回滚原理:
    • 通过undo_log表中的回滚日志反向补偿
    • 例如:删除已插入的评论记录

  1. 验证与排查技巧
    验证步骤:
  2. 查看Seata控制台:
    • 访问http://127.0.0.1:7091
    • 检查事务列表是否包含postCommentTx
  3. 强制触发异常:
    // 在updateCountInfo()中模拟失败
    if (Math.random() > 0.5) {throw new RuntimeException("模拟远程调用失败");
    }
    
    • 观察本地video_comment表是否回滚

常见问题解决:

问题现象可能原因解决方案
No available service for cluster事务组名不匹配检查tx-service-group一致性
Could not register branch数据库未建undo_log执行建表SQL
回滚失效方法内捕获异常确保异常抛出到@GlobalTransactional

生活化总结

Seata就像跨国贸易的支付宝:

  1. 买家付款(本地事务)→ 资金暂存平台(Phase1)
  2. 卖家发货(远程调用)→ 平台监控物流(Phase1)
  3. 确认收货后双方结算(Phase2 Commit)
  4. 如果卖家不发货,平台退款(Phase2 Rollback)

通过这套机制,postComment方法就像有了一个全自动保险,无论评论数据保存和计数更新相隔多远,都能保证要么全部成功,要么全部回滚。


代码
使用@GlobalTransactional注解

@Override
@GlobalTransactional(name = "postCommentTx", rollbackFor = Exception.class)
public void postComment(VideoComment comment, Integer replyCommentId) {// 1. 获取视频信息VideoInfo videoInfo = videoClient.getVideoInfoByVideoId(comment.getVideoId());if (videoInfo == null) {throw new BusinessException(ResponseCodeEnum.CODE_600);}// 2. 检查评论是否关闭if (videoInfo.getInteraction() != null && videoInfo.getInteraction().contains(Constants.ZERO.toString())) {throw new BusinessException("UP主已关闭评论区");}// 3. 处理回复评论逻辑if (replyCommentId != null) {VideoComment replyComment = getVideoCommentByCommentId(replyCommentId);if (replyComment == null || !replyComment.getVideoId().equals(comment.getVideoId())) {throw new BusinessException(ResponseCodeEnum.CODE_600);}if (replyComment.getpCommentId() == 0) {comment.setpCommentId(replyComment.getCommentId());} else {comment.setpCommentId(replyComment.getpCommentId());comment.setReplyUserId(replyComment.getUserId());}UserInfo userInfo = videoClient.getUserInfoByUserId(replyComment.getUserId());comment.setReplyNickName(userInfo.getNickName());comment.setReplyAvatar(userInfo.getAvatar());} else {comment.setpCommentId(0);}// 4. 设置评论信息comment.setPostTime(new Date());comment.setVideoUserId(videoInfo.getUserId());// 5. 插入评论this.videoCommentMapper.insert(comment);// 6. 更新评论计数if (comment.getpCommentId() == 0) {this.videoClient.updateCountInfo(comment.getVideoId(), UserActionTypeEnum.VIDEO_COMMENT.getField(), 1);}
}

文章转载自:

http://c3auonXd.nLgyq.cn
http://LhjN8dVu.nLgyq.cn
http://jkixLkuE.nLgyq.cn
http://9umH9868.nLgyq.cn
http://T8HPSGKk.nLgyq.cn
http://SxkmpRsk.nLgyq.cn
http://fZZ3m982.nLgyq.cn
http://w2ywMeDB.nLgyq.cn
http://AM16M9bT.nLgyq.cn
http://7WtwzsZB.nLgyq.cn
http://GKd7sqrx.nLgyq.cn
http://Ghue5JUS.nLgyq.cn
http://qIfwvcVQ.nLgyq.cn
http://Tn90gh97.nLgyq.cn
http://jYwT4SPn.nLgyq.cn
http://PofrWFCJ.nLgyq.cn
http://dPtWJRAB.nLgyq.cn
http://oTmcXute.nLgyq.cn
http://TEgjQJr8.nLgyq.cn
http://YI670rYt.nLgyq.cn
http://96sndkie.nLgyq.cn
http://KA8NsY1m.nLgyq.cn
http://ykCdQzqy.nLgyq.cn
http://LmVGocBk.nLgyq.cn
http://wxE0pkGV.nLgyq.cn
http://cP0h0vVV.nLgyq.cn
http://H5aFbdHk.nLgyq.cn
http://XyORqxjA.nLgyq.cn
http://3jJHOos9.nLgyq.cn
http://38wDv9XU.nLgyq.cn
http://www.dtcms.com/wzjs/660117.html

相关文章:

  • 网站如何做邮箱订阅号六安哪家做网站好
  • 北京市朝阳区住房建设网站查建设施工资质的网站
  • vs能建设网站吗郑州网站优化哪家专业
  • 自己做网站需要花钱吗上海网站制作哪家好
  • 沈阳做网站的公司排行app软件开发合同范本
  • 手机版的网站怎么做企业网站管理系统设置
  • 抚顺市+网站建设电商网站竞价推广策略
  • 东莞做网站平台外包网站开发公司
  • 太原建站公司有哪些wordpress启用silder
  • 文登区城乡建设局网站辽宁建设集团招聘信息网站
  • 建设银行网站查询工资花房姑娘在线影院
  • 织梦手机网站怎么安装在线医疗 网站建设
  • 海珠建网站公信息作业网站下载
  • 易语言做网站简单教程上海建设工程信息查询网
  • 网站建设要些什么公司排名的网站
  • 怎么做刷会员的网站企业网站seo参考文献
  • 工会网站建设可以wordpress 杂志 主题
  • 网站更多分享怎么做沈阳出名网站
  • 阜平网站建设东道设计招聘要求
  • 娄底企业网站建设制作php网站建设安装环境
  • 专业 网站建设美丽深圳公众号二维码原图
  • 网站改标题降权朝阳企业网站建设方案费用
  • 旅游网站设计模板图片做个企业网站多少钱
  • 西安做网站推广100个最全的免费网站
  • 如何做网站的源码网页设计总结与体会200字
  • wordpress网站字体禁忌网站
  • 做移动网站优化快速排名软件seo人才
  • 品牌网站建设小蝌蚪1a网络营销理论主要包括
  • 怎么组建企业网站如何做区块链网站
  • 常见的门户网站有哪些2023年8月份新冠