请稍等 ...
×

采纳答案成功!

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

关于库存一致的问题

1、库存redis和数据库异步,那产品展示也中的库存数字是用redis中的?还是数据库中的?
2、目前redis和provider消息是符合一致性了,那如果消息consumer处理失败,依旧无法保证redis和数据库最终事务一致?

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

1回答

龙虾三少 2019-06-16 22:07:25

关于展示问题,我建议都是按照redis中取,取不出来再取数据库的,若数据库内数据更新,比如下单成功,则发送异步消息去清除redis数据,这样下次过来就可以走数据库拿到正确的数据了,当然也会有扣减库存没有清redis快,但业务上对库存还剩多少件展示层面没必要那么实时


consumer处理失败分为两种情况:

  1. 程序退出或网络问题等,这种mq不会被标记为消费成功,mq会重试直到成功为止

  2. 无论重试多少次都不能consume成功的消息,目前情况下业务是先扣redis的,因此不会又这种情况

0 回复 有任何疑惑可以回复我~
  • 提问者 慕函数2082699 #1
    那跳出课程项目,如果实际遇到consumer存在消费失败的业务场景,这个时候怎么处理?发消息给provider补偿吗?
    回复 有任何疑惑可以回复我~ 2019-06-16 22:58:19
  • 使用mq这种情况只能保证消费端处理成功或者处理不成功也可以忽略的场景 没有办法回退provider 这种需要靠业务设计去规避
    回复 有任何疑惑可以回复我~ 2019-06-16 22:59:33
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信