美文网首页rabbitMQ
避免消息重复消费

避免消息重复消费

作者: 哥斯拉啊啊啊哦 | 来源:发表于2020-09-02 16:59 被阅读0次

前言:消息中间件 是用来 客户端 与 客户端之间通信的,那么就存在以下两个问题:

  1. 如何避免消息重复消费(针对consumer)
  2. 如何保证消息的可靠性投递(针对publisher)
    问题2看《消息100%投递的2种方案》

这一文讲问题1:如何避免消息重复消费


上图是消息投递的整个流程,熟悉该流程有助于理解本文

先理解 幂等性 这个概念,有助于后续理解 如何避免消息重复消费
幂等性:
在编程上,指任意多次执行所产生的影响均与一次执行的影响相同。
在数学上,指幂等方法,是可以使用相同的参数重复执行,并获得相同结果的函数。不用担心重复执行会对系统造成改变。

避免消息重复问题上,就是要实现类似 幂等方法 的功能,使消费者即使多次消费了同样的信息,结果也只跟消费了1次消息的结果一样,不会对业务造成影响。

下面用一个实际场景来举例幂等性的实现:

场景1:秒杀活动(如双十一,春节高铁买票)

用count表示库存
比如库存100,卖一件库存减1,减到0就不能再减,sql如下
update 表名 set count = count -1 
但如果库存只剩1,这时候刚好有2个请求同时上来,这时候再去减库存,
库存可能变为-1,这就出现了超卖行为,在业务上是不允许的,如何解决?

可以通过加1个版本号(version)来解决
原先的步骤是直接减库存,加 version 后,改成 先查询 version 号,再执行减库存操作,sql如下:
update 表名 set count = count -1 , version = version + 1 where version = 1
这样当并发请求发送来时,由于版本号被更新,后续的版本号找不到,
就不会执行减库存操作,用加 version 的方法来实现类似乐观锁的效果

相关文章

  • 避免消息重复消费

    前言:消息中间件 是用来 客户端 与 客户端之间通信的,那么就存在以下两个问题: 如何避免消息重复消费(针对con...

  • RabbitMQ总结

    生产者、交换机、队列、消费者关系 如何保证RabbitMQ的高可用 避免消息堆积 避免消息丢失 如何保证不重复消费...

  • 如何避免消息队列的重复消费

    消息队列在数据传输的过程中,为了保证消息传递的可靠性,一般会对消息采用ack确认机制,如果消息传递失败,消息队列会...

  • 聊聊MQ,如何避免消息丢失?如何避免重复消费?

    前言 我在工作中,使用到消息中间件MQ的业务还是挺多的,我从事在一家交通行业的公司,业务中经常会涉及处理一些违法数...

  • Kafka消费者总结

    提交偏移量的方式,如何保证消息不丢失,不重复消费自动提交偏移量,会导致消息重复消费和消息丢失。重复消费是因为,当一...

  • RabbitMQ实战(三)-高级特性

    0 相关源码 1 你将学到 如何保证消息百分百投递成功 幂等性 如何避免海量订单生成时消息的重复消费 Confir...

  • 消息100%投递的两种方案

    前言:消息中间件 是用来 客户端 与 客户端之间通信的,那么就存在以下两个问题: 如何避免消息重复消费(针对con...

  • kafka防止消息重复消费

    kafka重复消费的根本原因就是“数据消费了,但是offset没更新”!而我们要探究一般什么情况下会导致offse...

  • 分布式消息队列:如何保证消息不被重复消费?(消息队列消费的幂等性

    怎么保证消息不被重复消费?(消息队列消费的幂等性) 先大概说一说可能会有哪些重复消费的问题。首先就是比如rabbi...

  • Windows 安装 RocketMQ

    一、RocketMQ 介绍 1、消息顺序2、消息重复消费3、事务消息 二、RocketMQ 安装 Windows:...

网友评论

    本文标题:避免消息重复消费

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