美文网首页
MQ消费端的幂等

MQ消费端的幂等

作者: zhong0316 | 来源:发表于2019-02-22 09:26 被阅读156次

MQ消费端在接收到MQ消息之后按照业务key(uuid)进行防重,达到消费的幂等性。

业务场景

用户在使用白条优惠劵打白条支付订单后,如果用户整单退款,需要给用户补发优惠劵。白条异步处理系统监听白条退款MQ消息进行整单退退劵操作。对于一笔订单,整单退之后,用户的优惠劵只能补发一次。因此需要对MQ消费做防重幂等操作。

消费幂等的必要性

因为网络会发生抖动,MQ消费端和生产端都可能会出现超时,这样MQ就会出现重复发送和重复消费的情况,因此需要做到消费幂等。防止因此可能产生的资产损失。

整单退退劵的幂等

异步处理系统在接收到退款消息之后,会判断当前订单是否已经整单退款,如果已经整单退款,首先会恢复用户的参与次数(库存),然后会写退款流水记录(refund_record)。这两个步骤的操作是一个事务。退款流水记录的'uuid'字段用来防重(加唯一索引),'uuid'的生成规则为'userId' + 'orderId'。这样在MQ重试或者并发时spring会抛出DuplicateKeyException。我们捕获这个异常,如果是这个异常,默认MQ消费成功。这样就可以做到MQ消费的幂等性。简单地说,就是通过数据库的唯一索引来保证MQ消费的幂等。
流程图如下:

整单退流程图

相关文章

  • MQ消费端的幂等

    MQ消费端在接收到MQ消息之后按照业务key(uuid)进行防重,达到消费的幂等性。 业务场景 用户在使用白条优惠...

  • mq消费幂等总结

    mq消费幂等总结针对mq新增场景:1、单个新增:1)首先查本地db是否已存在,存在则幂等2)加redis乐观锁,加...

  • 消费端幂等性

    方式一 方式二

  • MQ消息幂等

    三种: at-least-once 至少一次没收到确认消息就重试,需要consumer自己保证幂等 at-most...

  • 微服务架构实战笔记--分布式锁问题

    业务层面幂等 冗余部署多个进程存在并发消费的可能性并发转变成串行消费 发送端会发送很多次,消费端可能会消费很多次,...

  • rabbitmq保证消息可靠 消息不丢失

    三端可靠 发送方和mq保证消息送达到mq mq保证保存的消息不丢失 消费方和mq一起保证消息被成功消费 发送方和m...

  • rabbitmq保证消息可靠 消息不丢失

    三端可靠 发送方和mq保证消息送达到mq mq保证保存的消息不丢失 消费方和mq一起保证消息被成功消费 发送方和m...

  • 3. MQ消息-重复消费&消费的幂等性

    一 背景 首先,比如 RabbitMQ、RocketMQ、Kafka,都有可能会出现消息重复消费的问题,正常。因为...

  • MQ的重复消费处理

    背景 在MQ使用过程中要考虑很多异常情况,重复消费,幂等性是系统设计里必须考虑的一环。MQ本身对这个问题有做一些处...

  • 消息队列

    MQ的作用 消息通信MQ的基础功能即为消息通信。使用MQ的客户端可以将消息发送到MQ中,也可以从MQ中消费消息。 ...

网友评论

      本文标题:MQ消费端的幂等

      本文链接:https://www.haomeiwen.com/subject/skdsyqtx.html