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

北京做网站哪个好/免费推广平台排行

北京做网站哪个好,免费推广平台排行,wordpress标题字体大小,.net域名 可以做公司网站吗最近项目当中有个场景问题,需要在数据更新完成之后,发送mq消息通知周边系统进行操作。但是周边系统需要用到当前事务更新完成的数据。经常出现mq消息处理过程中拿不到更新之后的数据。经过排查日志,查看sql执行情况,代码逻辑。还跟…

最近项目当中有个场景问题,需要在数据更新完成之后,发送mq消息通知周边系统进行操作。但是周边系统需要用到当前事务更新完成的数据。经常出现mq消息处理过程中拿不到更新之后的数据。经过排查日志,查看sql执行情况,代码逻辑。还跟组内成员反复查看代码执行逻辑。就是没发现问题点在哪里!
然后只能跟踪debug代码执行过程,终于发现在事务执行过程中,并没看到commit的过程,mq就把消息发出去了。
然后查看源码,发现在事务提交后,提供了afterCommit的方法,需要我们自己来实现。
解决方案:
1、把mq发消息放到afterCommit里来执行

@Transactional(rollbackFor = Exception.class)
@Override
public boolean synchronousData(ReqDTO reqDTO) throws BizException {// 生成任务idfinal Long taskId = generator.gain();if(!CollectionUtils.isEmpty(ids)){// 更新taskIdList<Long> idList = ids.stream().map(Long::valueOf).collect(Collectors.toList());userMapper.updateBatchTaskId(idList,taskId,new Date());TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {// 事务完成后,进行消息发送@Overridepublic void afterCommit() {// 发送任务消息TaskCreateDTO taskCreateDTO = new TaskCreateDTO();taskCreateDTO.setType(1);taskCreateDTO.setTaskId(taskId);boolean result = produceHandler.sendTaskCreateMessage(taskCreateDTO);log.debug("sendTaskCreateMessage taskId:{},result:{}", taskId, result);}});}else {return false;}return true;
}

2、把mq发消息的逻辑移出@Transactional包含的事务代码块


@Transactional(rollbackFor = Exception.class)
@Override
public boolean synchronousData(ReqDTO reqDTO) throws BizException {// 生成任务idfinal Long taskId = generator.gain();if(!CollectionUtils.isEmpty(ids)){// 更新taskIdList<Long> idList = ids.stream().map(Long::valueOf).collect(Collectors.toList());userMapper.updateBatchTaskId(idList,taskId,new Date());}else {return false;}return true;
}// 发送消息
private void sendMessage(Long taskId){// 发送任务消息TaskCreateDTO taskCreateDTO = new TaskCreateDTO();taskCreateDTO.setType(1);taskCreateDTO.setTaskId(taskId);boolean result = produceHandler.sendTaskCreateMessage(taskCreateDTO);log.debug("sendTaskCreateMessage taskId:{},result:{}", taskId, result);
}

源码学习:

// 事务同步器
public interface TransactionSynchronization extends Flushable {int STATUS_COMMITTED = 0;int STATUS_ROLLED_BACK = 1;int STATUS_UNKNOWN = 2;default void suspend() {}default void resume() {}default void flush() {}// 事务提交前的操作default void beforeCommit(boolean readOnly) {}default void beforeCompletion() {}// 事务提交后的操作default void afterCommit() {}default void afterCompletion(int status) {}
}

-------------欢迎各位留言交流学习,如有不正确的地方,请予以指正。【Q:981233589】

http://www.lbrq.cn/news/1075447.html

相关文章:

  • 制作企业网站页面多少钱/如何制作网站教程
  • 网站设计需要什么证/贵阳网站建设公司
  • 渭南免费做网站公司/搜索引擎优化工具有哪些
  • app网站排名/长春视频剪辑培训机构
  • 亿赐客网站/什么样的人适合做策划
  • 许昌企业网站建设公司/营销模式
  • 双鸭山网站建设企业/百度首页排名代发
  • 教做凉拌菜的视频网站/怎么做一个网站页面
  • wordpress搜索小工具/广州seo优化公司
  • wordpress+私信/上海网站营销seo方案
  • 四川住房建设厅网站增项查询/手机网页制作
  • 邢台网站建设服务商/今天的新闻最新消息
  • 微信网站开发源代码/百度官网下载安装免费
  • 晋江做鞋子批发的网站/东莞互联网推广
  • 谷歌推广网站/网络营销专业学什么课程
  • 电商网购系统/优化大师软件大全
  • 成立一个做网站的工作室/企业网站建设的一般要素
  • 网站开发与管理所对应的职位及岗位/郑州seo技术外包
  • 兼职网站建设收费/湛江seo网站管理
  • 合肥seo网站优化/快手流量推广免费网站
  • 网站建设冒用身份信息/合肥网络推广公司
  • 中方元建设工程 网站/网站如何优化流程
  • wordpress建站教程凌风/营销策划与运营方案
  • 做h5页面有哪些好网站/济南疫情最新消息
  • 郑州网站制作公司/净水器十大品牌
  • 网站删除模块/网络营销核心要素
  • 网站过期查询/网站推广公司推荐
  • 网站建设违约/百度广告平台电话
  • 宁波网站建设设计价格/网上怎么做推广
  • 网站建设包含哪些费用/首页关键词优化公司
  • Kafka——关于Kafka动态配置
  • JVM学习日记(十四)Day14——性能监控与调优(一)
  • [人工智能-综述-17]:AI革命:重塑职业版图,开启文明新篇
  • .NET Core部署服务器
  • 【扩散模型专栏】01 扩散模型入门:概念与背景
  • 抓大鹅小游戏微信抖音流量主小程序开源