美文网首页
MQ的重复消费处理

MQ的重复消费处理

作者: 奔跑的Robi | 来源:发表于2019-08-02 11:45 被阅读0次

背景

在MQ使用过程中要考虑很多异常情况,重复消费,幂等性是系统设计里必须考虑的一环。MQ本身对这个问题有做一些处理。比如kafka在内部定义了一个offset,每一条消息写入后都有一个offset,代表消息序号,消费端消费数据后,隔一段时间就会把自己消费过的消息的offset提交一下,下一次重启时候会从上次的offset处继续往下消费。
正常的情况下这样运行是没有问题的,但是系统设计需要考虑很多的宕机,断电,网络异常等极端情况,假设在消费端消费完数据还未上报offset的时候,这时消费端挂了,那么在下次消费时就可能出现重复消费的情况。

解决方案

重复消费只是个行为,重要的是如何保证系统幂等性。所谓幂等性就是保证系统不管接受多少次同样的请求,要能保证返回的结果是相同的。

为了保证幂等性,首先可以看后端的具体操作,比如后端接收数据后存入redis,并且使用的是string存储,那完全不需要做其他的操作,同一个key的value是会被覆盖的。但是这种场景一般比较少吧,既然都使用MQ来削峰了,后端何必搭个缓存,如果后端服务器处理速度跟不上,反而会造成redis中的数据冗余
如果后端接收数据后是存入MYSQL之类的数据库,重复消费甚至可能导致主键相同的异常,这时在消费端应该做主键的验证,可以在每一次消费后将消费过的消息ID存入redis,每一条消息过来先去redis中验证一下是否已经消费过。

相关文章

  • MQ的重复消费处理

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

  • 那些年开发中遇到的坑:mq重试

    那些年在开发中遇到的坑 今日遇到一个分布式服务重复消费mq的问题!猜测是阿里云MQ的一个处理逻辑、当业务处理超时时...

  • 防止mq重复消费

    1. 利用全局唯一id 消息里放入全局唯一id,做完业务后查询id是否存在表里,不存在则将唯一id插入数据库单独...

  • RabbitMQ【三】如何保证消息不丢失

    关于MQ的几件小事(四)如何保证消息不丢失 1.mq原则 数据不能多,也不能少,不能多是说消息不能重复消费,这个我...

  • Rabbitmq如何保证消息不丢失

    1.mq原则数据不能多,也不能少,不能多是说消息不能重复消费;不能少,就是说不能丢失数据。如果mq传递的是非常核心...

  • 3、rabbitmq如何保证消息不被重复消费

    我们使用MQ的时候肯定是消息是准确的,既不能多也不能少。那我们来看看什么情况下可能会出现重复消费的情况。 重复消费...

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

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

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

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

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

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

  • 消息队列

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

网友评论

      本文标题:MQ的重复消费处理

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