请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于消息队列和mysql对接时出现的异常

项目里我们不是把更新数据库和生成订单等费时操作都放在数据库里了嘛。那如果在更新数据库的时候系统发生意料之外异常了,此时令牌缓存已经减少了。这个事务改怎么保证呢?
消息队列有保证事务的操作嘛
如果从业务上来实现的话,该怎么设计

正在回答 回答被采纳积分+3

1回答

甲蛙 2023-09-18 17:26:59

令牌不需要很准确的数据,有很多情况会导致令牌消耗而没抢到票,设计令牌只是为了提高访问速度。

一种是我们在控台可以修改令牌的数据,另一种是可以做跑批,自动定时的根据余票数修正令牌数

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_Theonlywinne_0 #1
    但是缓存减过后,用户端显示的应该是购买成功,等着后面消息队列排到以及,减数据库库存然后给用户发送出票成功的短信。这个时候消息队列和数据库对接出现问题,这个用户不就永远等不到出票成功了吗。应该是要设计一个重做机制吧,直接给用户返回出票失败不太好,毕竟已经掏了买机票的钱。那这个重做机制怎么实现呢?
    回复 有任何疑惑可以回复我~ 2023-09-18 17:37:18
  • 甲蛙 回复 提问者 qq_Theonlywinne_0 #2
    我们的排队出票其实同时只会有一个线程在出,也就是说当AB两个人都抢票时,AB都放队列了,A消费后开始加载所有订单出票,所以它会把B的票也一起出了,而B因为那不到锁,所以消费线程结束,什么也没做。那么当B消费异常时,只要其它人在抢票,B的票还是会跟着别人的线程出的。所以,只要B的订单出了,它就肯定会出票。
    另外,我们可以做个跑批,每5分钟消费一次MQ,防止没有人再抢票,导致B的票一直出不来。
    以上指的是同一列车的情况,不同的车,锁不一样,可以同时出票,互不干扰
    回复 有任何疑惑可以回复我~ 2023-09-18 22:58:52
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信