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

中国建设会计学会网站怎么做微拍网站

中国建设会计学会网站,怎么做微拍网站,湛江seo推广外包,深圳高端网站制作公司TCC是Try、Confirm、Cancel三个词语的缩写#xff0c;TCC要求每个分支事务实现三个操作#xff1a;预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离)#xff0c;此阶段仅是一个初步操作#xff0c;它和后续的Confirm一起才能真正构成…TCC是Try、Confirm、Cancel三个词语的缩写TCC要求每个分支事务实现三个操作预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离)此阶段仅是一个初步操作它和后续的Confirm一起才能真正构成一个完整的业务逻辑。2、Confirm 阶段是做确认提交Try阶段所有分支事务执行成功后开始执行Confirm。通常情况下TCC认为Confirm阶段是不会出错的若Confirm阶段真的出错了则重试或人工处理。3、Cancel 阶段是在业务执行错误需要回滚的状态下执行分支事务的业务取消预留资源释放。通常情况下TCC认为Cancel阶段也是一定成功的若Cancel阶段真的出错了则重试或人工处理。TM事务管理器首先发起所有的分支事务的try操作任何一个分支事务的try操作执行失败TM将会发起所有分支事务的Cancel操作若try操作全部成功TM将会发起所有分支事务的Confirm操作其中Confirm/Cancel操作若执行失败TM会进行重试。所有try都成功有一个try失败特别提醒所有分支事务的try阶段执行成功则会执行confirm阶段。TCC认为confirm阶段一定会执行成功如果confirm执行失败则会重试或者人工处理错误。任何一个分支事务的try阶段执行失败则会执行cancel阶段。TCC认为cancel阶段一定会执行成功如果cancel执行失败则会重试或者人工处理错误。TCC需要注意三种异常处理分别是空回滚、幂等、悬挂。空回滚事务管理器调用服务的try操作可能会出现因为丢包而导致的网络超时导致应用的try阶段没执行事务管理器认为执行try超时会触发cancel操作。这就导致cancel比try先执行。悬挂1、事务协调器在调用 TCC 服务的一阶段 Try 操作时可能会出现因网络拥堵而导致的超时。2、此时事务管理器会触发二阶段回滚调用 TCC 服务的 Cancel 操作Cancel 执行正常。3、在此之后拥堵在网络上的一阶段 Try 数据包被 TCC 服务收到出现了二阶段 Cancel 请求比一阶段 Try 请求先执行的情况。4、此 TCC 服务在执行晚到的 Try 之后将永远不会再收到二阶段的 Confirm 或者 Cancel 造成 TCC 服务悬挂。幂等try、confirm、cancel都会被重复调用需要做幂等处理。处理空回滚、悬挂、幂等可以使用日志表来解决 空回滚、悬挂、幂等。新建3张表try阶段日志表local_try_log字段注释tx_no全局事务idcreate_time创建时间confirm阶段日志表local_confirm_log字段注释tx_no全局事务idcreate_time创建时间cancel阶段日志表local_cancel_log字段注释tx_no全局事务idcreate_time创建时间例子从银行1转账10元给银行2使用TCC方案方案1银行1try幂等校验查找try日志全局事务id是主键悬挂处理查找confirm、cancel日志全局事务id是主键检查余额是否够10元锁定10元插入try日志全局事务id是主键 confirm幂等校验查找confirm日志全局事务id是主键扣减10元删除锁定10元插入confirm日志全局事务id是主键 cancelcancel幂等校验查找cancel日志全局事务id是主键空回滚处理查找try日志全局事务id是主键增加余额10元回滚删除锁定10元插入cancel日志全局事务id是主键银行2try幂等校验查找try日志全局事务id是主键悬挂处理查找confirm、cancel日志全局事务id是主键插入待激活10元插入try日志全局事务id是主键 confirm幂等校验查找confirm日志全局事务id是主键正式增加30元删除待激活10元插入confirm日志全局事务id是主键 cancel空由于业务很简单上面的流程还可以取消锁定解锁的操作直接在银行1的try中扣减10元流程如下。方案2银行1try幂等校验查找try日志全局事务id是主键悬挂处理查找confirm、cancel日志全局事务id是主键检查余额是否够10元扣减10元插入try日志全局事务id是主键 confirm空 cancelcancel幂等校验查找cancel日志全局事务id是主键空回滚处理查找try日志全局事务id是主键增加余额10元回滚插入cancel日志全局事务id是主键银行2try空 confirm幂等校验查找confirm日志全局事务id是主键正式增加30元插入confirm日志全局事务id是主键 cancel空Hmily实现方案2的代码服务1Service Slf4j public class Bank1ServiceImpl implements Bank1Service {AutowiredAccountInfoDao accountInfoDao;AutowiredHmilyLogDao hmilyLogDao;AutowiredBank2Client bank2Client;OverrideTransactional(rollbackFor Exception.class)Hmily(confirmMethod confirm, cancelMethod cancel)public void updateAccountBalance(String msg, Double amount) {// 全局事务idString transId HmilyTransactionContextLocal.getInstance().get().getTransId();log.info(bank1 try 开始transId{}, transId);// 幂等判断int existTry hmilyLogDao.isExistTry(transId);// 通故全局事务id查找到try日志表明已经只执行过tryif (existTry 0) {log.info(已经执行过try无需重复执行trytransId{}, transId);return;}// 悬挂处理int existConfirm hmilyLogDao.isExistConfirm(transId);int existCancel hmilyLogDao.isExistCancel(transId);// 通故全局事务id查找到confirm、cancel日志表明已经只执行过confirm、cancelif (existConfirm 0 || existCancel 0) {log.info(confirmcancel有一个已经执行过try不能再次执行transId{}, transId);return;}// 制造空回滚if (StringUtils.equals(制造空回滚, msg)) {throw new RuntimeException(try方法没修改数据库就抛出异常cancel方法会执行形成空回滚transId transId);}// blank1减金额accountInfoDao.subtractAccountBalance(1, amount);// 添加try日志记录try日志和扣减余额在同一个本地事务中要么都成功要么都失败// 日志的组件id必须是全局事务id如果同一个事物重复调用try到这一步会报主键重复hmilyLogDao.addTry(transId);// 远程调用Boolean result bank2Client.transfer(msg, amount);if (!result) {throw new RuntimeException(调用bank2失败);}// bank1调用bank2成功后发生异常模拟回滚if (StringUtils.equals(bank1调用bank2成功后发生异常模拟回滚, msg)) {throw new RuntimeException(bank1调用bank2成功后发生异常模拟回滚transId transId);}}public void confirm(String accountNo, Double amount) {String transId HmilyTransactionContextLocal.getInstance().get().getTransId();log.info(bank1 confirm 开始执行transId{}, transId);}Transactional(rollbackFor Exception.class)public void cancel(String msg, Double amount) {// 全局事务idString transId HmilyTransactionContextLocal.getInstance().get().getTransId();log.info(bank1 cancel 开始执行transId{}, transId);// 幂等判断int existCancel hmilyLogDao.isExistCancel(transId);if (existCancel 0) {log.info(cancel已经执行过无需重复执行transId{}, transId);return;}// 处理空回滚int existTry hmilyLogDao.isExistTry(transId);if (existTry 0) {log.info(try未执行过不能执行canceltransId{}, transId);return;}// bank1回滚加钱accountInfoDao.addAccountBalance(msg, amount);// 添加日志hmilyLogDao.addCancel(transId);}} Service Slf4j public class Bank2ServiceImpl implements Bank2Service {AutowiredAccountInfoDao accountInfoDao;AutowiredHmilyLogDao hmilyLogDao;OverrideHmily(confirmMethod confirm, cancelMethod cancel)public void updateAccountBalance(String msg, Double amount) {String transId HmilyTransactionContextLocal.getInstance().get().getTransId();log.info(bank2 try 开始执行transId:{},transId);}Transactional(rollbackFor Exception.class)public void confirm(String msg, Double amount) {// 全局事务idString transId HmilyTransactionContextLocal.getInstance().get().getTransId();log.info(bank2 confirm 开始执行transId:{},transId);int existConfirm hmilyLogDao.isExistConfirm(transId);if (existConfirm 0) {log.info(bank2 confirm 已经执行过无需再次执行transId, transId);return;}// bank2加钱accountInfoDao.addAccountBalance(2, amount);// 添加confirm日志hmilyLogDao.addConfirm(transId);// bank2 confirm抛出异常会重试if (StringUtils.equals(confirm抛出异常会重试, msg)) {throw new RuntimeException(confirm抛出异常会重试transId transId);}}public void cancel(String msg, Double amount) {String transId HmilyTransactionContextLocal.getInstance().get().getTransId();log.info(bank2 cancel 开始执行transId:{},transId);}}
http://www.dnsts.com.cn/news/44551.html

相关文章:

  • 如何给一个网站做优化班级网站建设的范围
  • 网站注册便宜php房产中介网站源码
  • 网页图片显示不出来企业网站优化公司哪家好
  • 做微网站需要什么国内精美网站
  • 提高网站的访问速度怎么制作图片二维码
  • 网上做网站资金大概多少汕尾东莞网站建设
  • 吉安做网站的公司东营推广营销公司
  • 网站asp.net安装做跨境电商网站有哪些
  • 往网站上传照片怎么做安徽网站建设SEO优化制作设计公司
  • 东莞seo网站推广石家庄网站建设今天改网名
  • 昆山专业简历制作网站网站开发与设计的总体思想
  • 电子商务网站建立全屋定制十大公认品牌有哪些
  • 网站排名下降怎么上去在哪个网站可以学做淘宝详情
  • 大型资讯门户网站怎么做排名华为应用市场下载安装
  • 微信公众号php网站开发google广告投放技巧
  • 做旅游网站的目的是什么购买手机网站推荐
  • 网站关键词策略团购网站模块
  • 黄村做网站哪家快互联网家装公司
  • 购物网站那个信用好又便宜白云商城型网站建设
  • 网站广告联盟怎么做的邯郸网站设计建设
  • 福州网站建设流程网站没有icp备案是不是就是骗子
  • 商城网站商家入驻功能公司网站做的好的
  • 广东珠海网站建设网站建设展示型是什么
  • 韩国企业网站模板下载免费签名logo设计
  • 公司怎么注册网站免费wordpress本地更换为网站域名
  • 创建网站需要注意什么wordpress 视频不播放
  • 简述网站开发的工作流程网站个人中心页面设计
  • 网站建设业务流程wordpress横向导航菜单主题
  • 进行网站建设网站参考页面设计
  • 河北网站备案系统最新军事新闻军事最新新闻