activemq消费者抛异常怎么办?

新手上路,请多包涵

假如有订单和商品模块,订单下单成功后通过mq通知商品模块进行库存修改,如果商品模块在执行过程中抛异常了,是要对通知订单模块对订单回滚吗?

阅读 6.2k
3 个回答

我认为 订单和商品模块要求强一致(订单创建成功,则库存即刻减少,反之亦然)
分俩种情况讨论:

  1. 订单内部调用商品模块

    开始事务-->生成订单-->调用减少库存-->提交事务。此时,保证了强一致性
    
  2. 有另一个服务C从外部调用 订单 和 商品

    商品服务需要提供回滚接口(库存+操作),总体上调用顺序如下:
    调用商品服务-->调用订单服务(这个可以多次尝试)-->失败调用回滚接口-->提示用户失败
    

    第二种情况已经涉及到分布式事务的相关问题了,此时如果你认为不要求强一致性,可以去查看相关资料,你用MQ也可以考虑我提议的调用顺序,先减库存,保证有库存,再发消息生成订单,通过多次重试,持久化消息等机制保证订单创建成功

订单下单成功并减库存应该放在同个事务里,要回滚就一起回滚,要重试一起重试,通过消息去触发,应该考虑下本身这个设计是否有问题

强一致就看看分布式事务
不然可以通过订单系统的补单机制,补到商品模块成功为止.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题