0%

消息重复消费问题

消息重复消费问题

为什么会出现重复消费?

原因一:生产者消息重复发送

可能出现的情况

  • 生产者发送消息给消息中间件,消息中间件收到消息并进行存储,但是此时消息中间件出现了问题,导致生产者没有收到发送成功的返回,导致的消息重试
  • 消息中间件因为负载高响应变慢,成功把消息存储到消息存储后,返回成功超时,导致的消息重试
  • 消息中间件将消息成功写入消息存储后,在返回结果时网络出现问题,导致消息重试

解决方案

  • 在消息中加入一个唯一id,这样消息重试也不会造成数据重复,在进行处理时需要判断id

原因二:消息中间件投递时重复

  • 消息被投递到消费者时,处理完毕后应用出现问题,没有返回消费成功,此时消息中间件再次投递
  • 消息被投递到消费者进行处理,处理完毕后网络出现问题,导致消息中间件没有收到消息处理结果,再次投递
  • 消息被投递到消费者进行处理,处理时间超时,导致再次投递
  • 消息被投递到消费者进行处理,处理完毕后消息中间件出现问题,没有收到消息处理结果,再次投递
  • 消息被投递到消费者进行处理,处理完毕后消息中间件收到结果,但是消息存储故障,没有更新投递状态,再次投递

解决方案

  • 在消息中加入一个唯一id,这样消息重试也不会造成数据重复,在进行处理时需要判断id

欢迎关注我的其它发布渠道