由异步引发的思考

起因: 我司需要在已有逻辑上增加对数据的统计;

实现: 在单个流程执行完毕之后异步发起对数据的统计;

异常: 订单完成之后统计是发现订单非完成状态;

原因: 统计动作的发起位置放在了事务之中, 统计动作执行的时候, 事务还没有提交完毕, 导致读取不到事务提交之后的数据;

解决: 将异步任务提到service之外, 根据service的返回值, 判断是否执行统计任务;

引发的一系列思考:

  特殊情况下甚至可能会出现异步执行完毕, 但是事务却回滚的状态.

  所有无法被事务影响的操作都应该在事务之外; 例如对缓存, mq, 异步等.

  但是这里是对返回值进行了判断才确定是否执行任务, 可以有不需要判断返回值直接执行的情况, 那就是对于拒绝执行的判断全都抛出异常, 只要全部成功之后才会执行异步任务.

  (mq很多时候比异步更合适, mq可以实现跨系统通信, 可以从任何位置发起下一个任务的执行. 但是异步对于邮件发送, 短信提醒一类等小任务更方便).

   

转载于:https://www.cnblogs.com/fuershi/p/10578266.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值